1 |
- {"version":3,"sources":["node_modules/three/build/three.module.js","node_modules/three/examples/js/loaders/GLTFLoader.js","js/lib/swiper-4.1.6.min.js","../../../../../.npm-global/lib/node_modules/parcel-bundler/node_modules/process/browser.js","node_modules/@tweenjs/tween.js/src/Tween.js","js/util.js","js/video.js","node_modules/three/examples/js/controls/OrbitControls.js","js/iphonex.js","../../../../../.npm-global/lib/node_modules/parcel-bundler/src/builtins/bundle-url.js","../../../../../.npm-global/lib/node_modules/parcel-bundler/src/builtins/css-loader.js"],"names":["Number","EPSILON","undefined","Math","pow","isInteger","value","isFinite","floor","sign","x","Function","prototype","Object","defineProperty","get","toString","match","assign","target","TypeError","output","index","arguments","length","source","nextKey","hasOwnProperty","call","EventDispatcher","addEventListener","type","listener","_listeners","listeners","indexOf","push","hasEventListener","removeEventListener","listenerArray","splice","dispatchEvent","event","array","slice","i","l","REVISION","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","UnsignedInt248Type","AlphaFormat","RGBFormat","RGBAFormat","LuminanceFormat","LuminanceAlphaFormat","RGBEFormat","DepthFormat","DepthStencilFormat","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","RGBA_ASTC_4x4_Format","RGBA_ASTC_5x4_Format","RGBA_ASTC_5x5_Format","RGBA_ASTC_6x5_Format","RGBA_ASTC_6x6_Format","RGBA_ASTC_8x5_Format","RGBA_ASTC_8x6_Format","RGBA_ASTC_8x8_Format","RGBA_ASTC_10x5_Format","RGBA_ASTC_10x6_Format","RGBA_ASTC_10x8_Format","RGBA_ASTC_10x10_Format","RGBA_ASTC_12x10_Format","RGBA_ASTC_12x12_Format","LoopOnce","LoopRepeat","LoopPingPong","InterpolateDiscrete","InterpolateLinear","InterpolateSmooth","ZeroCurvatureEnding","ZeroSlopeEnding","WrapAroundEnding","TrianglesDrawMode","TriangleStripDrawMode","TriangleFanDrawMode","LinearEncoding","sRGBEncoding","GammaEncoding","RGBEEncoding","LogLuvEncoding","RGBM7Encoding","RGBM16Encoding","RGBDEncoding","BasicDepthPacking","RGBADepthPacking","TangentSpaceNormalMap","ObjectSpaceNormalMap","_Math","DEG2RAD","PI","RAD2DEG","generateUUID","lut","d0","random","d1","d2","d3","uuid","toUpperCase","clamp","min","max","euclideanModulo","n","m","mapLinear","a1","a2","b1","b2","lerp","y","t","smoothstep","smootherstep","randInt","low","high","randFloat","randFloatSpread","range","degToRad","degrees","radToDeg","radians","isPowerOfTwo","ceilPowerOfTwo","ceil","log","LN2","floorPowerOfTwo","Vector2","defineProperties","set","isVector2","setScalar","scalar","setX","setY","setComponent","Error","getComponent","clone","constructor","copy","v","add","w","console","warn","addVectors","addScalar","s","a","b","addScaledVector","sub","subVectors","subScalar","multiply","multiplyScalar","divide","divideScalar","applyMatrix3","e","elements","clampScalar","minVal","maxVal","clampLength","round","roundToZero","negate","dot","lengthSq","sqrt","manhattanLength","abs","normalize","angle","atan2","distanceTo","distanceToSquared","dx","dy","manhattanDistanceTo","setLength","alpha","lerpVectors","v1","v2","equals","fromArray","offset","toArray","fromBufferAttribute","attribute","getX","getY","rotateAround","center","c","cos","sin","Matrix4","error","isMatrix4","n11","n12","n13","n14","n21","n22","n23","n24","n31","n32","n33","n34","n41","n42","n43","n44","te","identity","me","copyPosition","extractBasis","xAxis","yAxis","zAxis","setFromMatrixColumn","makeBasis","z","extractRotation","Vector3","scaleX","scaleY","scaleZ","makeRotationFromEuler","euler","isEuler","d","f","order","ae","af","be","bf","ce","cf","de","df","ac","ad","bc","bd","makeRotationFromQuaternion","zero","one","q","compose","lookAt","eye","up","crossVectors","multiplyMatrices","premultiply","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","applyToBufferAttribute","count","getZ","applyMatrix4","setXYZ","determinant","transpose","tmp","setPosition","getInverse","throwOnDegenerate","t11","t12","t13","t14","det","msg","detInv","scale","getMaxScaleOnAxis","scaleXSq","scaleYSq","scaleZSq","makeTranslation","makeRotationX","theta","makeRotationY","makeRotationZ","makeRotationAxis","axis","tx","ty","makeScale","makeShear","position","quaternion","_x","_y","_z","_w","x2","y2","z2","xx","xy","xz","yy","yz","zz","wx","wy","wz","sx","sy","sz","decompose","vector","matrix","invSX","invSY","invSZ","setFromRotationMatrix","makePerspective","left","right","top","bottom","near","far","makeOrthographic","h","p","Quaternion","slerp","qa","qb","qm","slerpFlat","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","x0","y0","z0","w0","x1","y1","z1","w1","dir","sqrSin","len","tDir","onChangeCallback","setFromEuler","update","c1","c2","c3","s1","s2","s3","setFromAxisAngle","halfAngle","m11","m12","m13","m21","m22","m23","m31","m32","m33","trace","setFromUnitVectors","r","EPS","vFrom","vTo","inverse","conjugate","multiplyQuaternions","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","cosHalfTheta","sqrSinHalfTheta","sinHalfTheta","halfTheta","ratioA","ratioB","onChange","callback","isVector3","setZ","multiplyVectors","applyEuler","applyQuaternion","applyAxisAngle","qx","qy","qz","qw","ix","iy","iz","iw","project","camera","projectionMatrix","matrixWorld","unproject","transformDirection","cross","ax","ay","az","bx","by","bz","projectOnVector","projectOnPlane","planeNormal","reflect","normal","angleTo","acos","dz","setFromSpherical","sinPhiRadius","phi","radius","setFromCylindrical","setFromMatrixPosition","setFromMatrixScale","Matrix3","isMatrix3","setFromMatrix4","g","getNormalMatrix","matrix4","transposeIntoArray","setUvTransform","rotation","cx","cy","rotate","translate","textureId","Texture","image","mapping","wrapS","wrapT","magFilter","minFilter","format","anisotropy","encoding","name","DEFAULT_IMAGE","mipmaps","DEFAULT_MAPPING","repeat","matrixAutoUpdate","generateMipmaps","premultiplyAlpha","flipY","unpackAlignment","version","onUpdate","create","isTexture","updateMatrix","toJSON","meta","isRootObject","textures","getDataURL","canvas","HTMLCanvasElement","document","createElementNS","width","height","context","getContext","ImageData","putImageData","drawImage","toDataURL","metadata","generator","wrap","images","url","Array","isArray","dispose","transformUv","uv","Vector4","isVector4","setW","setAxisAngleFromQuaternion","setAxisAngleFromRotationMatrix","epsilon","epsilon2","getW","WebGLRenderTarget","options","scissor","scissorTest","viewport","texture","depthBuffer","stencilBuffer","depthTexture","isWebGLRenderTarget","setSize","WebGLRenderTargetCube","activeCubeFace","activeMipMapLevel","isWebGLRenderTargetCube","DataTexture","data","isDataTexture","Box3","Infinity","isBox3","setFromArray","minX","minY","minZ","maxX","maxY","maxZ","setFromBufferAttribute","setFromPoints","points","makeEmpty","il","expandByPoint","setFromCenterAndSize","size","halfSize","setFromObject","object","expandByObject","box","isEmpty","getCenter","getSize","point","expandByVector","expandByScalar","scope","traverse","node","geometry","isGeometry","vertices","isBufferGeometry","attributes","updateMatrixWorld","containsPoint","containsBox","getParameter","intersectsBox","intersectsSphere","closestPoint","sphere","clampPoint","intersectsPlane","plane","constant","intersectsTriangle","v0","f0","f1","f2","testAxis","extents","triangleNormal","satForAxes","axes","j","p0","p1","p2","triangle","distanceToPoint","clampedPoint","getBoundingSphere","Sphere","intersect","union","xax","xay","xaz","xbx","xby","xbz","yax","yay","yaz","ybx","yby","ybz","zax","zay","zaz","zbx","zby","zbz","optionalCenter","maxRadiusSq","empty","radiusSum","deltaLengthSq","getBoundingBox","Plane","setComponents","setFromNormalAndCoplanarPoint","setFromCoplanarPoints","inverseNormalLength","distanceToSphere","projectPoint","intersectLine","line","direction","delta","denominator","start","intersectsLine","startSign","endSign","end","coplanarPoint","m1","optionalNormalMatrix","normalMatrix","referencePoint","Frustum","p3","p4","p5","planes","frustum","setFromMatrix","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","intersectsObject","boundingSphere","computeBoundingSphere","intersectsSprite","sprite","negRadius","distance","alphamap_fragment","alphamap_pars_fragment","alphatest_fragment","aomap_fragment","aomap_pars_fragment","begin_vertex","beginnormal_vertex","bsdfs","bumpmap_pars_fragment","clipping_planes_fragment","clipping_planes_pars_fragment","clipping_planes_pars_vertex","clipping_planes_vertex","color_fragment","color_pars_fragment","color_pars_vertex","color_vertex","common","cube_uv_reflection_fragment","defaultnormal_vertex","displacementmap_pars_vertex","displacementmap_vertex","emissivemap_fragment","emissivemap_pars_fragment","encodings_fragment","encodings_pars_fragment","envmap_fragment","envmap_pars_fragment","envmap_pars_vertex","envmap_vertex","fog_vertex","fog_pars_vertex","fog_fragment","fog_pars_fragment","gradientmap_pars_fragment","lightmap_fragment","lightmap_pars_fragment","lights_lambert_vertex","lights_pars_begin","lights_pars_maps","lights_phong_fragment","lights_phong_pars_fragment","lights_physical_fragment","lights_physical_pars_fragment","lights_fragment_begin","lights_fragment_maps","lights_fragment_end","logdepthbuf_fragment","logdepthbuf_pars_fragment","logdepthbuf_pars_vertex","logdepthbuf_vertex","map_fragment","map_pars_fragment","map_particle_fragment","map_particle_pars_fragment","metalnessmap_fragment","metalnessmap_pars_fragment","morphnormal_vertex","morphtarget_pars_vertex","morphtarget_vertex","normal_fragment_begin","normal_fragment_maps","normalmap_pars_fragment","packing","premultiplied_alpha_fragment","project_vertex","dithering_fragment","dithering_pars_fragment","roughnessmap_fragment","roughnessmap_pars_fragment","shadowmap_pars_fragment","shadowmap_pars_vertex","shadowmap_vertex","shadowmask_pars_fragment","skinbase_vertex","skinning_pars_vertex","skinning_vertex","skinnormal_vertex","specularmap_fragment","specularmap_pars_fragment","tonemapping_fragment","tonemapping_pars_fragment","uv_pars_fragment","uv_pars_vertex","uv_vertex","uv2_pars_fragment","uv2_pars_vertex","uv2_vertex","worldpos_vertex","cube_frag","cube_vert","depth_frag","depth_vert","distanceRGBA_frag","distanceRGBA_vert","equirect_frag","equirect_vert","linedashed_frag","linedashed_vert","meshbasic_frag","meshbasic_vert","meshlambert_frag","meshlambert_vert","meshphong_frag","meshphong_vert","meshphysical_frag","meshphysical_vert","normal_frag","normal_vert","points_frag","points_vert","shadow_frag","shadow_vert","ShaderChunk","UniformsUtils","merge","uniforms","merged","u","uniforms_src","uniforms_dst","parameter_src","isColor","ColorKeywords","Color","setRGB","setHex","setStyle","hex","setHSL","hue2rgb","style","handleAlpha","string","parseFloat","exec","color","components","parseInt","charAt","copyGammaToLinear","gammaFactor","copyLinearToGamma","safeInverse","convertGammaToLinear","convertLinearToGamma","copySRGBToLinear","SRGBToLinear","copyLinearToSRGB","LinearToSRGB","convertSRGBToLinear","convertLinearToSRGB","getHex","getHexString","getHSL","hue","saturation","lightness","getStyle","offsetHSL","hsl","addColors","color1","color2","UniformsLib","diffuse","opacity","map","uvTransform","alphaMap","specularmap","specularMap","envmap","envMap","flipEnvMap","reflectivity","refractionRatio","maxMipLevel","aomap","aoMap","aoMapIntensity","lightmap","lightMap","lightMapIntensity","emissivemap","emissiveMap","bumpmap","bumpMap","bumpScale","normalmap","normalMap","normalScale","displacementmap","displacementMap","displacementScale","displacementBias","roughnessmap","roughnessMap","metalnessmap","metalnessMap","gradientmap","gradientMap","fog","fogDensity","fogNear","fogFar","fogColor","lights","ambientLightColor","directionalLights","properties","shadow","shadowBias","shadowRadius","shadowMapSize","directionalShadowMap","directionalShadowMatrix","spotLights","coneCos","penumbraCos","decay","spotShadowMap","spotShadowMatrix","pointLights","shadowCameraNear","shadowCameraFar","pointShadowMap","pointShadowMatrix","hemisphereLights","skyColor","groundColor","rectAreaLights","ShaderLib","basic","vertexShader","fragmentShader","lambert","emissive","phong","specular","shininess","standard","roughness","metalness","envMapIntensity","dashed","dashSize","totalSize","depth","cube","tCube","tFlip","equirect","tEquirect","distanceRGBA","referencePosition","nearDistance","farDistance","physical","clearCoat","clearCoatRoughness","WebGLAnimation","isAnimating","animationLoop","onAnimationFrame","time","frame","requestAnimationFrame","stop","setAnimationLoop","setContext","WebGLAttributes","gl","buffers","WeakMap","createBuffer","bufferType","usage","dynamic","DYNAMIC_DRAW","STATIC_DRAW","buffer","bindBuffer","bufferData","onUploadCallback","FLOAT","Float32Array","Float64Array","Uint16Array","UNSIGNED_SHORT","Int16Array","SHORT","Uint32Array","UNSIGNED_INT","Int32Array","INT","Int8Array","BYTE","Uint8Array","UNSIGNED_BYTE","bytesPerElement","BYTES_PER_ELEMENT","updateBuffer","updateRange","bufferSubData","subarray","isInterleavedBufferAttribute","remove","deleteBuffer","delete","Euler","_order","DefaultOrder","RotationOrders","asin","setFromQuaternion","setFromVector3","reorder","newOrder","toVector3","optionalResult","Layers","mask","channel","enable","toggle","disable","test","layers","object3DId","Object3D","parent","children","DefaultUp","onRotationChange","onQuaternionChange","enumerable","modelViewMatrix","DefaultMatrixAutoUpdate","matrixWorldNeedsUpdate","visible","castShadow","receiveShadow","frustumCulled","renderOrder","userData","isObject3D","onBeforeRender","onAfterRender","applyMatrix","setRotationFromAxisAngle","setRotationFromEuler","setRotationFromMatrix","setRotationFromQuaternion","rotateOnAxis","q1","rotateOnWorldAxis","rotateX","rotateY","rotateZ","translateOnAxis","translateX","translateY","translateZ","localToWorld","worldToLocal","isCamera","getObjectById","id","getObjectByProperty","getObjectByName","child","getWorldPosition","getWorldQuaternion","getWorldScale","getWorldDirection","raycast","traverseVisible","traverseAncestors","force","geometries","materials","shapes","JSON","stringify","serialize","library","element","parameters","shape","material","uuids","extractFromCache","cache","values","key","recursive","parse","Camera","matrixWorldInverse","OrthographicCamera","zoom","view","updateProjectionMatrix","isOrthographicCamera","setViewOffset","fullWidth","fullHeight","enabled","offsetX","offsetY","clearViewOffset","zoomW","zoomH","scaleW","scaleH","Face3","materialIndex","vertexNormals","vertexColors","geometryId","Geometry","colors","faces","faceVertexUvs","morphTargets","morphNormals","skinWeights","skinIndices","lineDistances","boundingBox","elementsNeedUpdate","verticesNeedUpdate","uvsNeedUpdate","normalsNeedUpdate","colorsNeedUpdate","lineDistancesNeedUpdate","groupsNeedUpdate","vertex","face","jl","computeBoundingBox","obj","fromBufferGeometry","indices","positions","normals","uvs","uvs2","uv2","tempNormals","tempUVs","tempUVs2","addFace","groups","group","computeFaceNormals","cb","ab","fl","vA","vB","vC","computeVertexNormals","areaWeighted","vl","computeFlatVertexNormals","computeMorphNormals","__originalFaceNormal","__originalVertexNormals","tmpGeo","faceNormals","dstNormalsFace","dstNormalsVertex","faceNormal","materialIndexOffset","vertexOffset","vertices1","vertices2","faces1","faces2","uvs1","colors1","colors2","vertexCopy","faceCopy","faceVertexNormals","faceVertexColors","uvCopy","mergeMesh","mesh","isMesh","mergeVertices","verticesMap","unique","changes","precisionPoints","precision","faceIndicesToRemove","idx","diff","sortFacesByMaterialIndex","_id","materialIndexSort","sort","newUvs1","newUvs2","normalsHash","colorsHash","uvsHash","hasMaterial","hasFaceUv","hasFaceVertexUv","hasFaceNormal","hasFaceVertexNormal","hasFaceColor","hasFaceVertexColor","faceType","setBit","getUvIndex","getNormalIndex","getColorIndex","hash","k","kl","uvsCopy","morphTarget","morphNormal","srcVertexNormal","destVertexNormal","BufferAttribute","itemSize","normalized","isBufferAttribute","setArray","setDynamic","copyAt","index1","index2","copyArray","copyColorsArray","copyVector2sArray","vectors","copyVector3sArray","copyVector4sArray","setXY","setXYZW","onUpload","Int8BufferAttribute","Uint8BufferAttribute","Uint8ClampedBufferAttribute","Uint8ClampedArray","Int16BufferAttribute","Uint16BufferAttribute","Int32BufferAttribute","Uint32BufferAttribute","Float32BufferAttribute","Float64BufferAttribute","DirectGeometry","computeGroups","fromGeometry","hasFaceVertexUv2","morphTargetsLength","morphTargetsPosition","morphNormalsLength","morphTargetsNormal","hasSkinIndices","hasSkinWeights","vertexUvs","arrayMax","bufferGeometryId","BufferGeometry","morphAttributes","drawRange","getIndex","setIndex","addAttribute","getAttribute","removeAttribute","addGroup","clearGroups","setDrawRange","needsUpdate","isPoints","isLine","updateFromObject","direct","__directGeometry","lineDistance","fromDirectGeometry","isNaN","pA","pB","pC","normalizeNormals","attribute1","attributeArray1","attribute2","attributeArray2","attributeSize","toNonIndexed","geometry2","array2","keys","morphAttribute","BoxGeometry","widthSegments","heightSegments","depthSegments","BoxBufferGeometry","numberOfVertices","groupStart","buildPlane","udir","vdir","gridX","gridY","segmentWidth","segmentHeight","widthHalf","heightHalf","depthHalf","gridX1","gridY1","vertexCounter","groupCount","PlaneGeometry","PlaneBufferGeometry","width_half","height_half","segment_width","segment_height","materialId","Material","blending","side","flatShading","transparent","blendSrc","blendDst","blendEquation","blendSrcAlpha","blendDstAlpha","blendEquationAlpha","depthFunc","depthTest","depthWrite","clippingPlanes","clipIntersection","clipShadows","shadowSide","colorWrite","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","dithering","alphaTest","premultipliedAlpha","overdraw","isMaterial","onBeforeCompile","setValues","newValue","currentValue","isRoot","emissiveIntensity","normalMapType","sizeAttenuation","linewidth","gapSize","wireframe","wireframeLinewidth","wireframeLinecap","wireframeLinejoin","skinning","srcPlanes","dstPlanes","MeshBasicMaterial","combine","isMeshBasicMaterial","ShaderMaterial","defines","clipping","extensions","derivatives","fragDepth","drawBuffers","shaderTextureLOD","defaultAttributeValues","index0AttributeName","uniformsNeedUpdate","isShaderMaterial","Ray","origin","ray","at","recast","closestPointToPoint","directionDistance","distanceSqToPoint","distanceSqToSegment","segCenter","segDir","optionalPointOnRay","optionalPointOnSegment","segExtent","a01","b0","s0","sqrDist","extDet","invDet","intersectSphere","tca","radius2","thc","t0","t1","distanceToPlane","intersectPlane","distToPoint","intersectBox","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","intersectTriangle","edge1","edge2","backfaceCulling","DdN","DdQxE2","DdE1xQ","QdN","Line3","distanceSq","closestPointToPointParameter","startP","startEnd","clampToLine","startEnd2","startEnd_startP","Triangle","getNormal","targetLengthSq","getBarycoord","dot00","dot01","dot02","dot11","dot12","denom","invDenom","setFromPointsAndIndices","i0","i1","i2","getArea","getMidpoint","getPlane","edgeList","projectedPoint","minDistance","Mesh","drawMode","updateMorphTargets","setDrawMode","morphTargetInfluences","morphTargetDictionary","ml","String","inverseMatrix","tempA","tempB","tempC","uvA","uvB","uvC","barycoord","intersectionPoint","intersectionPointWorld","uvIntersection","uv1","uv3","checkIntersection","raycaster","checkBufferGeometryIntersection","intersection","intersects","groupMaterial","faceIndex","fvA","fvB","fvC","isMultiMaterial","faceMaterial","morphInfluences","tl","influence","targets","uvs_f","WebGLBackground","renderer","state","objects","clearColor","clearAlpha","planeCamera","planeMesh","boxMesh","render","renderList","scene","forceClear","background","setClear","autoClear","clear","autoClearColor","autoClearDepth","autoClearStencil","isCubeTexture","renderBufferDirect","getClearColor","setClearColor","getClearAlpha","setClearAlpha","WebGLBufferRenderer","info","mode","setMode","drawArrays","renderInstances","extension","drawArraysInstancedANGLE","maxInstancedCount","WebGLCapabilities","maxAnisotropy","getMaxAnisotropy","MAX_TEXTURE_MAX_ANISOTROPY_EXT","getMaxPrecision","getShaderPrecisionFormat","VERTEX_SHADER","HIGH_FLOAT","FRAGMENT_SHADER","MEDIUM_FLOAT","maxPrecision","logarithmicDepthBuffer","maxTextures","MAX_TEXTURE_IMAGE_UNITS","maxVertexTextures","MAX_VERTEX_TEXTURE_IMAGE_UNITS","maxTextureSize","MAX_TEXTURE_SIZE","maxCubemapSize","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","floatVertexTextures","WebGLClipping","globalState","numGlobalPlanes","localClippingEnabled","renderingShadows","viewNormalMatrix","uniform","numPlanes","numIntersection","init","enableLocalClipping","projectPlanes","beginShadows","endShadows","resetGlobalState","setState","fromCache","nGlobal","lGlobal","dstArray","clippingState","skipTransform","nPlanes","flatSize","viewMatrix","i4","WebGLExtensions","getExtension","WebGLGeometries","wireframeAttributes","onGeometryDispose","buffergeometry","memory","_bufferGeometry","geometryAttributes","ELEMENT_ARRAY_BUFFER","ARRAY_BUFFER","getWireframeAttribute","geometryIndex","WebGLIndexedBufferRenderer","drawElements","drawElementsInstancedANGLE","WebGLInfo","calls","triangles","lines","instanceCount","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","LINES","LINE_STRIP","LINE_LOOP","POINTS","reset","programs","autoReset","absNumericalSort","WebGLMorphtargets","influencesList","program","objectInfluences","influences","getUniforms","setValue","WebGLObjects","updateList","CubeTexture","emptyTexture","emptyCubeTexture","UniformContainer","seq","arrayCacheF32","arrayCacheI32","mat4array","mat3array","mat2array","flatten","nBlocks","blockSize","firstElem","arraysEqual","allocTexUnits","allocTextureUnit","setValue1f","uniform1f","addr","setValue1i","uniform1i","setValue2fv","uniform2f","uniform2fv","setValue3fv","uniform3f","uniform3fv","setValue4fv","uniform4f","uniform4fv","setValue2fm","uniformMatrix2fv","setValue3fm","uniformMatrix3fv","setValue4fm","uniformMatrix4fv","setValueT1","unit","setTexture2D","setValueT6","setTextureCube","setValue2iv","uniform2iv","setValue3iv","uniform3iv","setValue4iv","uniform4iv","getSingularSetter","setValue1fv","uniform1fv","setValue1iv","uniform1iv","setValueV2a","updateCache","setValueV3a","setValueV4a","setValueM2a","setValueM3a","setValueM4a","setValueT1a","units","setValueT6a","getPureArraySetter","SingleUniform","activeInfo","PureArrayUniform","StructuredUniform","RePathPart","addUniform","container","uniformObject","parseUniform","path","pathLength","lastIndex","matchEnd","idIsIndex","subscript","next","WebGLUniforms","getProgramParameter","ACTIVE_UNIFORMS","getActiveUniform","getUniformLocation","setOptional","upload","seqWithValue","addLineNumbers","split","join","WebGLShader","shader","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","programIdCount","getEncodingComponents","getTexelDecodingFunction","functionName","getTexelEncodingFunction","getToneMappingFunction","toneMapping","toneMappingName","generateExtensions","rendererExtensions","chunks","envMapCubeUV","objectSpaceNormalMap","filter","filterEmptyLine","generateDefines","fetchAttributeLocations","ACTIVE_ATTRIBUTES","getActiveAttrib","getAttribLocation","replaceLightNums","replace","numDirLights","numSpotLights","numRectAreaLights","numPointLights","numHemiLights","replaceClippingPlaneNums","numClippingPlanes","numClipIntersection","parseIncludes","pattern","include","unrollLoops","snippet","unroll","WebGLProgram","code","shadowMapTypeDefine","shadowMapType","envMapTypeDefine","envMapModeDefine","envMapBlendingDefine","gammaFactorDefine","customExtensions","customDefines","createProgram","prefixVertex","prefixFragment","isRawShaderMaterial","supportsVertexTextures","maxBones","useFog","fogExp","useVertexTexture","doubleSided","flipSided","shadowMapEnabled","physicallyCorrectLights","outputEncoding","mapEncoding","envMapEncoding","emissiveMapEncoding","depthPacking","vertexGlsl","fragmentGlsl","glVertexShader","glFragmentShader","attachShader","bindAttribLocation","linkProgram","programLog","getProgramInfoLog","trim","vertexLog","fragmentLog","runnable","haveDiagnostics","LINK_STATUS","getError","VALIDATE_STATUS","diagnostics","prefix","deleteShader","cachedUniforms","cachedAttributes","getAttributes","destroy","deleteProgram","usedTimes","WebGLPrograms","capabilities","shaderIDs","MeshDepthMaterial","MeshDistanceMaterial","MeshNormalMaterial","MeshLambertMaterial","MeshPhongMaterial","MeshToonMaterial","MeshStandardMaterial","MeshPhysicalMaterial","LineBasicMaterial","LineDashedMaterial","PointsMaterial","ShadowMaterial","parameterNames","allocateBones","skeleton","bones","nVertexUniforms","nVertexMatrices","getTextureEncodingFromMap","gammaOverrideLinear","getParameters","shadows","nClipPlanes","nClipIntersection","shaderID","isSkinnedMesh","currentRenderTarget","getRenderTarget","gammaOutput","gammaInput","envMapMode","isFogExp2","maxMorphTargets","maxMorphNormals","directional","spot","rectArea","hemi","shadowMap","getProgramCode","acquireProgram","pl","programInfo","releaseProgram","pop","WebGLProperties","painterSortStable","reversePainterSortStable","WebGLRenderList","renderItems","renderItemsIndex","opaque","renderItem","WebGLRenderLists","lists","list","UniformsCache","light","halfWidth","halfHeight","WebGLLights","ambient","vector3","matrix42","setup","directionalLength","pointLength","spotLength","rectAreaLength","hemiLength","intensity","isAmbientLight","isDirectionalLight","bias","mapSize","isSpotLight","penumbra","isRectAreaLight","isPointLight","isHemisphereLight","WebGLRenderState","lightsArray","shadowsArray","spritesArray","pushLight","pushShadow","shadowLight","pushSprite","setupLights","WebGLRenderStates","renderStates","renderState","isMeshDepthMaterial","isMeshDistanceMaterial","WebGLShadowMap","_renderer","_objects","_frustum","_projScreenMatrix","_shadowMapSize","_maxShadowMapSize","_lookTarget","_lightPositionWorld","_MorphingFlag","_SkinningFlag","_NumberOfMaterialVariants","_depthMaterials","_distanceMaterials","_materialCache","cubeDirections","cubeUps","cube2DViewPorts","useMorphing","useSkinning","depthMaterial","distanceMaterial","autoUpdate","_gl","_state","BLEND","setTest","setScissorTest","faceCount","shadowCamera","vpWidth","vpHeight","pars","isSpotLightShadow","shadowMatrix","setRenderTarget","vpDimensions","renderObject","getDepthMaterial","lightPositionWorld","result","materialVariants","customMaterial","customDepthMaterial","customDistanceMaterial","variantIndex","keyA","keyB","materialsForVariant","cachedMaterial","CanvasTexture","isCanvasTexture","WebGLSpriteRenderer","vertexBuffer","elementBuffer","spritePosition","spriteRotation","spriteScale","uvOffset","uvScale","fogType","fogDepth","fillStyle","fillRect","sprites","useProgram","initAttributes","enableAttribute","disableUnusedAttributes","CULL_FACE","vertexAttribPointer","activeTexture","TEXTURE0","oldFogType","sceneFogType","isFog","density","setBlending","setMask","WebGLState","utils","ColorBuffer","locked","currentColorMask","currentColorClear","colorMask","setLocked","lock","DepthBuffer","currentDepthMask","currentDepthFunc","currentDepthClear","DEPTH_TEST","depthMask","setFunc","NEVER","ALWAYS","LESS","LEQUAL","EQUAL","GEQUAL","GREATER","NOTEQUAL","clearDepth","StencilBuffer","currentStencilMask","currentStencilFunc","currentStencilRef","currentStencilFuncMask","currentStencilFail","currentStencilZFail","currentStencilZPass","currentStencilClear","stencilTest","STENCIL_TEST","stencilMask","stencilFunc","stencilRef","setOp","stencilFail","stencilZFail","stencilZPass","stencilOp","stencil","clearStencil","colorBuffer","maxVertexAttributes","newAttributes","enabledAttributes","attributeDivisors","compressedTextureFormats","currentProgram","currentBlending","currentBlendEquation","currentBlendSrc","currentBlendDst","currentBlendEquationAlpha","currentBlendSrcAlpha","currentBlendDstAlpha","currentPremultipledAlpha","currentFlipSided","currentCullFace","currentLineWidth","currentPolygonOffsetFactor","currentPolygonOffsetUnits","MAX_COMBINED_TEXTURE_IMAGE_UNITS","lineWidthAvailable","glVersion","VERSION","currentTextureSlot","currentBoundTextures","currentScissor","currentViewport","createTexture","bindTexture","texParameteri","TEXTURE_MIN_FILTER","NEAREST","TEXTURE_MAG_FILTER","texImage2D","RGBA","emptyTextures","TEXTURE_2D","TEXTURE_CUBE_MAP","TEXTURE_CUBE_MAP_POSITIVE_X","setFlipSided","setCullFace","enableAttributeAndDivisor","meshPerAttribute","enableVertexAttribArray","vertexAttribDivisorANGLE","disableVertexAttribArray","getCompressedTextureFormats","formats","COMPRESSED_TEXTURE_FORMATS","blendEquationSeparate","FUNC_ADD","blendFuncSeparate","ONE","blendFunc","SRC_ALPHA","ZERO","ONE_MINUS_SRC_COLOR","ONE_MINUS_SRC_ALPHA","SRC_COLOR","convert","setMaterial","frontFaceCW","setPolygonOffset","frontFace","CW","CCW","cullFace","BACK","FRONT","FRONT_AND_BACK","setLineWidth","lineWidth","factor","POLYGON_OFFSET_FILL","SCISSOR_TEST","webglSlot","webglType","webglTexture","boundTexture","compressedTexImage2D","apply","WebGLTextures","_isWebGL2","WebGL2RenderingContext","_videoTextures","_canvas","clampToMaxSize","maxSize","makePowerOfTwo","HTMLImageElement","ImageBitmap","textureNeedsPowerOfTwo","textureNeedsGenerateMipmaps","generateMipmap","textureProperties","__maxMipLevel","LOG2E","filterFallback","LINEAR","onTextureDispose","deallocateTexture","isVideoTexture","onRenderTargetDispose","renderTarget","deallocateRenderTarget","__image__webglTextureCube","deleteTexture","__webglInit","__webglTexture","renderTargetProperties","deleteFramebuffer","__webglFramebuffer","__webglDepthbuffer","deleteRenderbuffer","slot","updateVideoTexture","__version","complete","uploadTexture","pixelStorei","UNPACK_FLIP_Y_WEBGL","isCompressed","isCompressedTexture","cubeImage","isPowerOfTwoImage","glFormat","glType","setTextureParameters","mipmap","setTextureCubeDynamic","textureType","TEXTURE_WRAP_S","TEXTURE_WRAP_T","CLAMP_TO_EDGE","__currentAnisotropy","texParameterf","TEXTURE_MAX_ANISOTROPY_EXT","UNPACK_PREMULTIPLY_ALPHA_WEBGL","UNPACK_ALIGNMENT","isDepthTexture","internalFormat","DEPTH_COMPONENT","DEPTH_COMPONENT32F","DEPTH_COMPONENT16","DEPTH_STENCIL","setupFrameBufferTexture","framebuffer","attachment","textureTarget","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","setupRenderBufferStorage","renderbuffer","bindRenderbuffer","RENDERBUFFER","renderbufferStorage","framebufferRenderbuffer","DEPTH_ATTACHMENT","DEPTH_STENCIL_ATTACHMENT","RGBA4","setupDepthTexture","isCube","webglDepthTexture","setupDepthRenderbuffer","createRenderbuffer","setupRenderTarget","isTargetPowerOfTwo","createFramebuffer","COLOR_ATTACHMENT0","updateRenderTargetMipmap","WebGLUtils","REPEAT","MIRRORED_REPEAT","NEAREST_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_NEAREST","LINEAR_MIPMAP_LINEAR","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","UNSIGNED_SHORT_5_6_5","HALF_FLOAT_OES","ALPHA","RGB","LUMINANCE","LUMINANCE_ALPHA","FUNC_SUBTRACT","FUNC_REVERSE_SUBTRACT","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","UNSIGNED_INT_24_8_WEBGL","Group","isGroup","PerspectiveCamera","fov","aspect","focus","filmGauge","filmOffset","isPerspectiveCamera","setFocalLength","focalLength","vExtentSlope","getFilmHeight","atan","getFocalLength","tan","getEffectiveFOV","getFilmWidth","skew","ArrayCamera","cameras","isArrayCamera","WebVRManager","device","frameData","poseTarget","controllers","standingMatrix","standingMatrixInverse","window","VRFrameData","onVRDisplayPresentChange","tempQuaternion","tempPosition","cameraL","bounds","cameraR","cameraVR","isPresenting","currentSize","currentPixelRatio","eyeParameters","getEyeParameters","renderWidth","renderHeight","getPixelRatio","setDrawingBufferSize","animation","isTriggerPressed","findGamepad","gamepads","navigator","getGamepads","gamepad","startsWith","updateControllers","controller","pose","hasPosition","orientation","buttonId","buttons","pressed","userHeight","getController","getDevice","setDevice","setPoseTarget","getCamera","depthNear","depthFar","getFrameData","stageParameters","sittingToStandingTransform","poseObject","leftViewMatrix","rightViewMatrix","leftProjectionMatrix","rightProjectionMatrix","getLayers","layer","leftBounds","rightBounds","getStandingMatrix","submitFrame","WebXRManager","session","frameOfRef","inputSources","setCompatibleXRDevice","onSessionEvent","inputSource","onSessionEnd","setFramebuffer","setSession","baseLayer","XRWebGLLayer","requestFrameOfReference","frameOfReferenceType","then","getInputSources","updateCamera","onAnimationFrameCallback","getDevicePose","views","getViewport","getViewMatrix","inputPose","getInputPose","pointerMatrix","THREE","WebGLRenderer","_context","_alpha","_depth","_stencil","_antialias","antialias","_premultipliedAlpha","_preserveDrawingBuffer","preserveDrawingBuffer","_powerPreference","powerPreference","currentRenderList","currentRenderState","domElement","sortObjects","toneMappingExposure","toneMappingWhitePoint","_this","_isContextLost","_framebuffer","_currentRenderTarget","_currentFramebuffer","_currentMaterialId","_currentGeometryProgram","_currentCamera","_currentArrayCamera","_currentViewport","_currentScissor","_currentScissorTest","_usedTextureUnits","_width","_height","_pixelRatio","_viewport","_scissor","_scissorTest","_clipping","_clippingEnabled","_localClippingEnabled","_vector3","getTargetPixelRatio","contextAttributes","onContextLost","onContextRestore","message","programCache","renderLists","morphtargets","bufferRenderer","indexedBufferRenderer","spriteRenderer","initGLContext","vr","getContextAttributes","forceContextLoss","loseContext","forceContextRestore","restoreContext","setPixelRatio","updateStyle","setViewport","getDrawingBufferSize","pixelRatio","getCurrentViewport","setScissor","boolean","bits","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","clearTarget","preventDefault","onMaterialDispose","deallocateMaterial","releaseMaterialProgramReference","renderObjectImmediate","renderBufferImmediate","hasPositions","hasNormals","hasUvs","hasColors","programAttributes","positionArray","isMeshPhongMaterial","isMeshStandardMaterial","isMeshNormalMaterial","normalArray","nx","ny","nz","uvArray","colorArray","setProgram","geometryProgram","updateBuffers","rangeFactor","setupVertexAttributes","dataCount","rangeStart","rangeCount","drawStart","drawEnd","drawCount","isLineSegments","isLineLoop","isInstancedBufferGeometry","materialDefaultAttributeValues","programAttribute","geometryAttribute","stride","isInstancedInterleavedBuffer","isInstancedBufferAttribute","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttrib1fv","compile","isLight","initMaterial","projectObject","opaqueObjects","transparentObjects","overrideMaterial","renderObjects","isSprite","isImmediateRenderObject","camera2","materialProperties","programChange","lightsHash","numSupportedMorphTargets","numSupportedMorphNormals","progUniforms","uniformsList","useCache","refreshProgram","refreshMaterial","refreshLights","p_uniforms","m_uniforms","uCamPos","cameraPosition","isMeshLambertMaterial","boneTexture","boneMatrices","boneTextureSize","markUniformsLightsNeedsUpdate","refreshUniformsFog","refreshUniformsCommon","refreshUniformsLambert","isMeshToonMaterial","refreshUniformsToon","refreshUniformsPhong","isMeshPhysicalMaterial","refreshUniformsPhysical","refreshUniformsStandard","refreshUniformsDepth","refreshUniformsDistance","refreshUniformsNormal","isLineBasicMaterial","refreshUniformsLine","isLineDashedMaterial","refreshUniformsDash","isPointsMaterial","refreshUniformsPoints","isShadowMaterial","ltc_1","LTC_1","ltc_2","LTC_2","uvScaleMap","textureUnit","warned","setTexture","readRenderTargetPixels","restore","textureFormat","IMPLEMENTATION_COLOR_READ_FORMAT","IMPLEMENTATION_COLOR_READ_TYPE","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","readPixels","copyFramebufferToTexture","level","copyTexImage2D","copyTextureToTexture","srcTexture","dstTexture","texSubImage2D","FogExp2","Fog","Scene","SpriteMaterial","isSpriteMaterial","Sprite","intersectPoint","worldScale","mvPosition","alignedPosition","rotatedPosition","viewWorldMatrix","transformVertex","vertexPosition","LOD","levels","addLevel","getObjectForDistance","matrixPosition","Skeleton","boneInverses","calculateInverses","bone","isBone","offsetMatrix","identityMatrix","getBoneByName","Bone","SkinnedMesh","bindMode","bindMatrix","bindMatrixInverse","initBones","bind","normalizeSkinWeights","gbone","pos","rotq","scl","sw","vec","skinWeight","linecap","linejoin","Line","LineSegments","computeLineDistances","positionAttribute","linePrecision","precisionSq","vStart","vEnd","interSegment","interRay","step","distSq","nbVertices","LineLoop","Points","threshold","params","localThreshold","localThresholdSq","testPoint","rayPointDistanceSq","distanceToRay","VideoTexture","video","readyState","HAVE_CURRENT_DATA","CompressedTexture","DepthTexture","WireframeGeometry","o","ol","edge","edges","ParametricGeometry","func","slices","stacks","ParametricBufferGeometry","pu","pv","sliceCount","PolyhedronGeometry","detail","PolyhedronBufferGeometry","uvBuffer","subdivide","appplyRadius","generateUVs","getVertexByIndex","subdivideFace","cols","aj","bj","rows","pushVertex","azimuth","inclination","correctUVs","correctSeam","centroid","azi","correctUV","TetrahedronGeometry","TetrahedronBufferGeometry","OctahedronGeometry","OctahedronBufferGeometry","IcosahedronGeometry","IcosahedronBufferGeometry","DodecahedronGeometry","DodecahedronBufferGeometry","TubeGeometry","tubularSegments","radialSegments","closed","taper","bufferGeometry","TubeBufferGeometry","tangents","binormals","frames","computeFrenetFrames","P","generateBufferData","generateSegment","generateIndices","getPointAt","N","B","TorusKnotGeometry","tube","heightScale","TorusKnotBufferGeometry","P1","P2","T","calculatePositionOnCurve","cu","su","quOverP","cs","TorusGeometry","arc","TorusBufferGeometry","Earcut","triangulate","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","invSize","eliminateHoles","earcutLinked","clockwise","last","signedArea","insertNode","removeNode","filterPoints","again","steiner","area","prev","ear","pass","indexCurve","isEarHashed","isEar","cureLocalIntersections","splitEarcut","pointInTriangle","minTX","minTY","maxTX","maxTY","zOrder","nextZ","prevZ","locallyInside","isValidDiagonal","splitPolygon","queue","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","mx","my","tanMin","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","px","py","intersectsPolygon","middleInside","q2","inside","Node","an","bp","sum","ShapeUtils","contour","isClockWise","pts","triangulateShape","holes","removeDupEndPts","addContour","holeIndex","forEach","ExtrudeGeometry","ExtrudeBufferGeometry","verticesArray","addShape","placeholder","curveSegments","steps","bevelEnabled","bevelThickness","bevelSize","bevelSegments","extrudePath","uvgen","UVGenerator","WorldUVGenerator","amount","extrudePts","extrudeByPath","splineTube","binormal","position2","getSpacedPoints","ahole","hl","shapePoints","extractPoints","reverse","concat","scalePt2","pt","bs","vert","vlen","flen","getBevelVec","inPt","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","ptNextShift_x","ptNextShift_y","sf","v_trans_lensq","direction_eq","contourMovements","holesMovements","oneHoleMovements","verticesMovements","buildLidFaces","buildSideFaces","f3","layeroffset","sidewalls","sl","slen1","slen2","f4","addVertex","nextIndex","generateTopUV","addUV","generateSideWallUV","vector2","indexA","indexB","indexC","a_x","a_y","b_x","b_y","c_x","c_y","indexD","a_z","b_z","c_z","d_x","d_y","d_z","TextGeometry","text","TextBufferGeometry","font","isFont","generateShapes","SphereGeometry","phiStart","phiLength","thetaStart","thetaLength","SphereBufferGeometry","thetaEnd","grid","verticesRow","RingGeometry","innerRadius","outerRadius","thetaSegments","phiSegments","RingBufferGeometry","segment","radiusStep","thetaSegmentLevel","LatheGeometry","segments","LatheBufferGeometry","base","inverseSegments","n1","n2","ShapeGeometry","ShapeBufferGeometry","toJSON$1","shapeHole","indexOffset","shapeVertices","shapeHoles","EdgesGeometry","thresholdAngle","thresholdDot","sourceVertices","face1","face2","CylinderGeometry","radiusTop","radiusBottom","openEnded","CylinderBufferGeometry","indexArray","generateTorso","generateCap","slope","indexRow","sinTheta","cosTheta","centerIndexStart","centerIndexEnd","ConeGeometry","ConeBufferGeometry","CircleGeometry","CircleBufferGeometry","Geometries","freeze","RawShaderMaterial","Materials","Cache","files","file","LoadingManager","onLoad","onProgress","onError","isLoading","itemsLoaded","itemsTotal","urlModifier","onStart","itemStart","itemEnd","itemError","resolveURL","setURLModifier","transform","DefaultLoadingManager","loading","FileLoader","manager","load","cached","setTimeout","dataUriRegex","dataUriRegexResult","mimeType","isBase64","decodeURIComponent","atob","response","responseType","toLowerCase","charCodeAt","Blob","parser","DOMParser","parseFromString","request","XMLHttpRequest","open","callbacks","status","withCredentials","overrideMimeType","header","requestHeader","setRequestHeader","send","setPath","setResponseType","setWithCredentials","setMimeType","CompressedTextureLoader","_parser","loader","loadTexture","texDatas","loaded","mipmapCount","isCubemap","DataTextureLoader","texData","ImageLoader","crossOrigin","onImageLoad","onImageError","substr","src","setCrossOrigin","CubeTextureLoader","urls","TextureLoader","isJPEG","search","Curve","arcLengthDivisions","getPoint","optionalTarget","getUtoTmapping","getPoints","divisions","getLength","lengths","getLengths","cacheArcLengths","current","updateArcLengths","arcLengths","targetArcLength","comparison","lengthBefore","lengthAfter","segmentLength","segmentFraction","getTangent","t2","pt1","pt2","getTangentAt","mat","MAX_VALUE","tz","fromJSON","json","EllipseCurve","aX","aY","xRadius","yRadius","aStartAngle","aEndAngle","aClockwise","aRotation","isEllipseCurve","twoPi","deltaAngle","samePoints","ArcCurve","aRadius","isArcCurve","CubicPoly","c0","initCatmullRom","x3","tension","initNonuniformCatmullRom","dt0","dt1","dt2","calc","t3","pz","CatmullRomCurve3","curveType","isCatmullRomCurve3","intPoint","weight","CatmullRom","QuadraticBezierP0","QuadraticBezierP1","QuadraticBezierP2","QuadraticBezier","CubicBezierP0","CubicBezierP1","CubicBezierP2","CubicBezierP3","CubicBezier","CubicBezierCurve","v3","isCubicBezierCurve","CubicBezierCurve3","isCubicBezierCurve3","LineCurve","isLineCurve","tangent","LineCurve3","isLineCurve3","QuadraticBezierCurve","isQuadraticBezierCurve","QuadraticBezierCurve3","isQuadraticBezierCurve3","SplineCurve","isSplineCurve","Curves","CurvePath","curves","autoClose","curve","closePath","startPoint","endPoint","curveLengths","getCurveLengths","lens","cacheLengths","sums","resolution","Path","currentPoint","moveTo","lineTo","quadraticCurveTo","aCPx","aCPy","bezierCurveTo","aCP1x","aCP1y","aCP2x","aCP2y","splineThru","npts","absarc","absellipse","ellipse","firstPoint","lastPoint","Shape","getPointsHoles","holesPts","Light","HemisphereLight","LightShadow","SpotLightShadow","SpotLight","power","PointLight","DirectionalLightShadow","DirectionalLight","AmbientLight","RectAreaLight","StringKeyframeTrack","times","interpolation","KeyframeTrack","ValueTypeName","ValueBufferType","DefaultInterpolation","InterpolantFactoryMethodLinear","InterpolantFactoryMethodSmooth","BooleanKeyframeTrack","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_","QuaternionLinearInterpolant","QuaternionKeyframeTrack","getValueSize","ColorKeyframeTrack","NumberKeyframeTrack","CubicInterpolant","_weightPrev","_offsetPrev","_weightNext","_offsetNext","endingStart","endingEnd","iPrev","iNext","tPrev","tNext","halfDt","o1","o0","oP","oN","wP","wN","ppp","sP","sN","LinearInterpolant","offset1","offset0","weight1","weight0","DiscreteInterpolant","AnimationUtils","arraySlice","from","to","isTypedArray","convertArray","forceClone","ArrayBuffer","isView","DataView","getKeyframeOrder","compareTime","sortedArray","nValues","srcOffset","flattenJSON","jsonKeys","valuePropertyName","TimeBufferType","setInterpolation","validate","optimize","trackType","_getTrackTypeForValueTypeName","track","getInterpolation","typeName","VectorKeyframeTrack","InterpolantFactoryMethodDiscrete","factoryMethod","createInterpolant","shift","timeOffset","timeScale","startTime","endTime","nKeys","valid","prevTime","currTime","smoothInterpolation","writeIndex","keep","timeNext","offsetP","offsetN","readOffset","writeOffset","AnimationClip","duration","tracks","resetDuration","jsonTracks","frameTime","fps","clip","clipTracks","CreateFromMorphTargetSequence","morphTargetSequence","noLoop","numMorphTargets","findByName","objectOrClipArray","clipArray","animations","CreateClipsFromMorphTargetSequences","animationToMorphTargets","parts","animationMorphTargets","clips","parseAnimation","addNonemptyTrack","trackName","animationKeys","propertyName","destTracks","clipName","hierarchyTracks","hierarchy","morphTargetNames","morphTargetName","animationKey","boneName","MaterialLoader","setTextures","getTexture","shading","BufferGeometryLoader","typedArray","TYPED_ARRAYS","drawcalls","offsets","Loader","Handlers","handlers","regex","onLoadStart","onLoadProgress","onLoadComplete","initMaterials","texturePath","createMaterial","BlendingMode","textureLoader","materialLoader","fullPath","mapDiffuseRepeat","mapDiffuseOffset","mapDiffuseWrap","mapDiffuseAnisotropy","mapEmissiveRepeat","mapEmissiveOffset","mapEmissiveWrap","mapEmissiveAnisotropy","mapLightRepeat","mapLightOffset","mapLightWrap","mapLightAnisotropy","mapAORepeat","mapAOOffset","mapAOWrap","mapAOAnisotropy","mapBumpRepeat","mapBumpOffset","mapBumpWrap","mapBumpAnisotropy","mapNormalRepeat","mapNormalOffset","mapNormalWrap","mapNormalAnisotropy","mapSpecularRepeat","mapSpecularOffset","mapSpecularWrap","mapSpecularAnisotropy","mapMetalnessRepeat","mapMetalnessOffset","mapMetalnessWrap","mapMetalnessAnisotropy","mapRoughnessRepeat","mapRoughnessOffset","mapRoughnessWrap","mapRoughnessAnisotropy","mapAlphaRepeat","mapAlphaOffset","mapAlphaWrap","mapAlphaAnisotropy","LoaderUtils","decodeText","TextDecoder","decode","fromCharCode","escape","extractUrlBase","lastIndexOf","JSONLoader","setTexturePath","parseModel","isBitSet","fi","zLength","colorIndex","normalIndex","uvIndex","isQuad","faceA","faceB","uvLayer","nUvLayers","parseSkin","influencesPerVertex","parseMorphing","dstVertices","srcVertices","morphColors","parseAnimations","outputAnimations","morphAnimationClips","ObjectLoader","substring","parseShape","parseGeometries","parseImages","parseTextures","parseMaterials","parseObject","geometryLoader","bufferGeometryLoader","details","geometryShapes","loadImage","currentUrl","parseConstant","TEXTURE_MAPPING","TEXTURE_WRAPPING","TEXTURE_FILTER","getGeometry","getMaterial","ImageBitmapLoader","createImageBitmap","fetch","setOptions","res","blob","imageBitmap","catch","ShapePath","subPaths","currentPath","toShapes","isCCW","noHoles","toShapesNoHoles","inSubpaths","tmpPath","tmpShape","isPointInsidePolygon","inPolygon","polyLen","edgeLowPt","edgeHighPt","edgeDx","edgeDy","perpEdge","solid","holesFirst","betterShapeHoles","newShapes","newShapeHoles","mainIdx","tmpPoints","ambiguous","toChange","sIdx","sLen","sho","hIdx","ho","hole_unassigned","s2Idx","froms","tos","tmpHoles","Font","paths","createPaths","chars","line_height","yMax","yMin","underlineThickness","char","ret","createPath","glyph","glyphs","cpx","cpy","cpx1","cpy1","cpx2","cpy2","outline","_cachedOutline","action","ha","FontLoader","AudioContext","webkitAudioContext","AudioLoader","bufferCopy","decodeAudioData","audioBuffer","StereoCamera","eyeSep","instance","eyeRight","eyeLeft","eyeSepOnProjection","ymax","xmin","xmax","CubeCamera","cubeResolution","cameraPX","cameraNX","cameraPY","cameraNY","cameraPZ","cameraNZ","AudioListener","gain","createGain","connect","destination","getInput","removeFilter","disconnect","getFilter","setFilter","getMasterVolume","setMasterVolume","setTargetAtTime","currentTime","positionX","setValueAtTime","positionY","positionZ","forwardX","forwardY","forwardZ","upX","upY","upZ","setOrientation","Audio","autoplay","loop","playbackRate","isPlaying","hasPlaybackControl","sourceType","filters","getOutput","setNodeSource","audioNode","setMediaElementSource","mediaElement","createMediaElementSource","setBuffer","play","createBufferSource","onended","onEnded","pause","getFilters","setFilters","setPlaybackRate","getPlaybackRate","getLoop","setLoop","getVolume","setVolume","PositionalAudio","panner","createPanner","getRefDistance","refDistance","setRefDistance","getRolloffFactor","rolloffFactor","setRolloffFactor","getDistanceModel","distanceModel","setDistanceModel","getMaxDistance","maxDistance","setMaxDistance","setDirectionalCone","coneInnerAngle","coneOuterAngle","coneOuterGain","AudioAnalyser","audio","fftSize","analyser","createAnalyser","frequencyBinCount","getFrequencyData","getByteFrequencyData","getAverageFrequency","PropertyMixer","binding","mixFunction","_slerp","_select","_lerp","_mixBufferRegion","cumulativeWeight","useCount","referenceCount","accumulate","accuIndex","currentWeight","mix","originalValueOffset","saveOriginalState","getValue","restoreOriginalState","RESERVED_CHARS_RE","Composite","targetGroup","optionalParsedPath","parsedPath","PropertyBinding","parseTrackName","_targetGroup","_bindings","subscribe_","firstValidIndex","nCachedObjects_","bindings","unbind","rootNode","findNode","nodeName","root","isAnimationObjectGroup","sanitizeNodeName","reservedRe","RegExp","wordChar","wordCharOrDot","directoryRe","nodeRe","objectRe","propertyRe","trackRe","supportedObjectNames","matches","results","objectName","objectIndex","propertyIndex","lastDot","searchNodeSubtree","childNode","subTreeNode","_getValue_unavailable","_setValue_unavailable","BindingType","Direct","EntireArray","ArrayElement","HasFromToArray","Versioning","None","NeedsUpdate","MatrixWorldNeedsUpdate","GetterByBindingType","getValue_direct","getValue_array","resolvedProperty","getValue_arrayElement","getValue_toArray","SetterByBindingTypeAndVersioning","setValue_direct","targetObject","setValue_direct_setNeedsUpdate","setValue_direct_setMatrixWorldNeedsUpdate","setValue_array","dest","setValue_array_setNeedsUpdate","setValue_array_setMatrixWorldNeedsUpdate","setValue_arrayElement","setValue_arrayElement_setNeedsUpdate","setValue_arrayElement_setMatrixWorldNeedsUpdate","setValue_fromArray","setValue_fromArray_setNeedsUpdate","setValue_fromArray_setMatrixWorldNeedsUpdate","getValue_unbound","targetArray","sourceArray","nodeProperty","versioning","bindingType","_getValue_unbound","_setValue_unbound","AnimationObjectGroup","_indicesByUUID","_paths","_parsedPaths","_bindingsIndicesByPath","stats","total","inUse","bindingsPerObject","nObjects","nCachedObjects","indicesByUUID","parsedPaths","nBindings","knownObject","firstActiveIndex","lastCachedObject","bindingsForPath","lastCached","lastCachedIndex","firstActiveObject","firstActive","uncache","lastObject","indicesByPath","unsubscribe_","lastBindingsIndex","lastBindings","lastBindingsPath","AnimationAction","mixer","localRoot","_mixer","_clip","_localRoot","nTracks","interpolants","interpolantSettings","interpolant","_interpolantSettings","_interpolants","_propertyBindings","_cacheIndex","_byClipCacheIndex","_timeScaleInterpolant","_weightInterpolant","_loopCount","_startTime","_effectiveTimeScale","_effectiveWeight","repetitions","paused","clampWhenFinished","zeroSlopeAtStart","zeroSlopeAtEnd","_activateAction","_deactivateAction","stopFading","stopWarping","isRunning","_isActiveAction","isScheduled","startAt","setEffectiveWeight","getEffectiveWeight","fadeIn","_scheduleFading","fadeOut","crossFadeFrom","fadeOutAction","warp","fadeInDuration","fadeOutDuration","startEndRatio","endStartRatio","crossFadeTo","fadeInAction","weightInterpolant","_takeBackControlInterpolant","setEffectiveTimeScale","getEffectiveTimeScale","setDuration","syncWith","halt","startTimeScale","endTimeScale","now","_lendControlInterpolant","timeScaleInterpolant","getMixer","getClip","getRoot","_root","_update","deltaTime","timeDirection","_updateWeight","timeRunning","_updateTimeScale","clipTime","_updateTime","propertyMixers","interpolantValue","loopCount","_setEndings","handle_stop","pingPong","loopDelta","pending","atStart","atEnd","weightNow","weightThen","AnimationMixer","_initMemoryManager","_accuIndex","_bindAction","prototypeAction","rootUuid","bindingsByRoot","_bindingsByRootAndName","bindingsByName","_addInactiveBinding","clipUuid","actionsForClip","_actionsByClip","knownActions","_addInactiveAction","_lendBinding","_lendAction","_takeBackBinding","_takeBackAction","_actions","_nActiveActions","_nActiveBindings","_controlInterpolants","_nActiveControlInterpolants","actions","controlInterpolants","actionsByClip","actionByRoot","_removeInactiveAction","lastInactiveAction","cacheIndex","knownActionsForClip","lastKnownAction","byClipCacheIndex","_removeInactiveBindingsForAction","_removeInactiveBinding","prevIndex","lastActiveIndex","firstInactiveAction","firstInactiveIndex","lastActiveAction","bindingByName","propBinding","lastInactiveBinding","remove_empty_map","_","firstInactiveBinding","lastActiveBinding","_controlInterpolantsResultBuffer","__cacheIndex","lastActiveInterpolant","clipAction","optionalRoot","clipObject","existingAction","newAction","stopAllAction","nActions","uncacheClip","actionsToRemove","uncacheRoot","uncacheAction","Uniform","InstancedBufferGeometry","InterleavedBufferAttribute","interleavedBuffer","InterleavedBuffer","isInterleavedBuffer","InstancedInterleavedBuffer","InstancedBufferAttribute","Raycaster","PointCloud","ascSort","intersectObject","setFromCamera","coords","intersectObjects","Clock","autoStart","oldTime","elapsedTime","running","performance","Date","getElapsedTime","getDelta","newTime","Spherical","other","makeSafe","vec3","Cylindrical","Box2","ImmediateRenderObject","VertexNormalsHelper","nNormals","objGeometry","objPos","objNorm","SpotLightHelper","cone","coneLength","coneWidth","getBoneList","boneList","SkeletonHelper","boneMatrix","matrixWorldInv","PointLightHelper","sphereSize","RectAreaLightHelper","HemisphereLightHelper","GridHelper","PolarGridHelper","radials","circles","FaceNormalsHelper","DirectionalLightHelper","lightPlane","targetLine","CameraHelper","pointMap","colorFrustum","colorCone","colorUp","colorTarget","colorCross","addLine","addPoint","setPoint","BoxHelper","Box3Helper","PlaneHelper","positions2","lineGeometry","coneGeometry","ArrowHelper","headLength","headWidth","setDirection","setColor","AxesHelper","Face4","LineStrip","LinePieces","MeshFaceMaterial","MultiMaterial","Particle","ParticleSystem","PointCloudMaterial","ParticleBasicMaterial","ParticleSystemMaterial","Vertex","DynamicBufferAttribute","Int8Attribute","Uint8Attribute","Uint8ClampedAttribute","Int16Attribute","Uint16Attribute","Int32Attribute","Uint32Attribute","Float32Attribute","Float64Attribute","construct","createPointsGeometry","createGeometry","createSpacedPointsGeometry","fromPoints","ClosedSplineCurve3","SplineCurve3","Spline","initFromArray","getControlPointsArray","reparametrizeByArcLength","AxisHelper","BoundingBoxHelper","EdgesHelper","setColors","WireframeHelper","XHRLoader","BinaryTextureLoader","isIntersectionBox","isIntersectionSphere","random16","nearestPowerOfTwo","nextPowerOfTwo","flattenToArrayOffset","multiplyVector3","multiplyVector3Array","applyToBuffer","applyToVector3Array","extractPosition","getPosition","multiplyToArray","multiplyVector4","rotateAxis","crossVector","rotateByAxis","makeFrustum","isIntersectionLine","isIntersectionPlane","barycoordFromPoint","midpoint","extractAllPoints","extrude","makeGeometry","fromAttribute","distanceToManhattan","lengthManhattan","setEulerFromRotationMatrix","setEulerFromQuaternion","getPositionFromMatrix","getScaleFromMatrix","getColumnFromMatrix","applyProjection","computeTangents","getChildByName","renderDepth","getWorldRotation","eulerOrder","useQuaternion","setLens","onlyShadow","shadowCameraFov","shadowCameraLeft","shadowCameraRight","shadowCameraTop","shadowCameraBottom","shadowCameraVisible","shadowDarkness","shadowMapWidth","shadowMapHeight","copyIndicesArray","addIndex","addDrawCall","clearDrawCalls","computeOffsets","getArrays","addShapeList","wrapAround","wrapRGB","metal","animate","getCurrentRenderTarget","getPrecision","resetGLState","supportsFloatTextures","supportsHalfFloatTextures","supportsStandardDerivatives","supportsCompressedTextureS3TC","supportsCompressedTexturePVRTC","supportsBlendMinMax","supportsInstancedArrays","enableScissorTest","addPrePlugin","addPostPlugin","updateShadowMap","setFaceCulling","shadowMapCullFace","renderReverseSided","renderSingleSided","standing","audioLoader","getData","updateCubeMap","GeometryUtils","geometry1","ImageUtils","loadTextureCube","loadCompressedTexture","loadCompressedTextureCube","Projector","projectVector","unprojectVector","pickingRay","CanvasRenderer","SceneUtils","createMultiMaterialObject","detach","attach","LensFlare","CubeGeometry","GLTFLoader","dracoLoader","setDRACOLoader","content","magic","BINARY_EXTENSION_HEADER_MAGIC","EXTENSIONS","KHR_BINARY_GLTF","GLTFBinaryExtension","asset","extensionsUsed","extensionName","extensionsRequired","KHR_LIGHTS","GLTFLightsExtension","KHR_MATERIALS_UNLIT","GLTFMaterialsUnlitExtension","KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS","GLTFMaterialsPbrSpecularGlossinessExtension","KHR_DRACO_MESH_COMPRESSION","GLTFDracoMeshCompressionExtension","MSFT_TEXTURE_DDS","GLTFTextureDDSExtension","GLTFParser","scenes","glTF","addUnknownExtensionsToUserData","GLTFRegistry","removeAll","DDSLoader","ddsLoader","lightId","lightNode","innerConeAngle","outerConeAngle","getMaterialType","extendParams","materialParams","metallicRoughness","pbrMetallicRoughness","baseColorFactor","baseColorTexture","assignTexture","Promise","all","BINARY_EXTENSION_BUFFER_NAME","BINARY_EXTENSION_HEADER_LENGTH","BINARY_EXTENSION_CHUNK_TYPES","BIN","body","headerView","getUint32","chunkView","chunkIndex","byteLength","chunkLength","chunkType","contentArray","byteOffset","decodePrimitive","primitive","bufferViewIndex","bufferView","gltfAttributeMap","threeAttributeMap","attributeNormalizedMap","attributeTypeMap","attributeName","ATTRIBUTES","accessorDef","accessors","componentType","WEBGL_COMPONENT_TYPES","getDependency","resolve","decodeDracoFile","specularGlossinessParams","pbrSpecularGlossiness","specularMapParsFragmentChunk","glossinessMapParsFragmentChunk","specularMapFragmentChunk","glossinessMapFragmentChunk","lightPhysicalFragmentChunk","glossiness","glossinessMap","diffuseFactor","diffuseTexture","glossinessFactor","specularFactor","specularGlossinessTexture","specGlossIndex","isGLTFSpecularGlossinessMaterial","cloneMaterial","refreshUniforms","USE_GLOSSINESSMAP","USE_ROUGHNESSMAP","GLTFCubicSplineInterpolant","stride2","stride3","td","m0","WEBGL_CONSTANTS","FLOAT_MAT3","FLOAT_MAT4","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","SAMPLER_2D","WEBGL_TYPE","WEBGL_FILTERS","WEBGL_WRAPPINGS","WEBGL_TEXTURE_FORMATS","WEBGL_TEXTURE_DATATYPES","WEBGL_SIDES","WEBGL_DEPTH_FUNCS","WEBGL_BLEND_EQUATIONS","WEBGL_BLEND_FUNCS","WEBGL_TYPE_SIZES","POSITION","NORMAL","TEXCOORD_0","TEXCOORD0","TEXCOORD","TEXCOORD_1","COLOR_0","COLOR0","COLOR","WEIGHTS_0","WEIGHT","JOINTS_0","JOINT","PATH_PROPERTIES","translation","weights","INTERPOLATION","CUBICSPLINE","STEP","STATES_ENABLES","ALPHA_MODES","OPAQUE","MASK","createDefaultMaterial","knownExtensions","objectDef","gltfExtensions","addMorphTargets","hasMorphPosition","hasMorphNormal","morphPositions","cloneBufferAttribute","normalAttribute","meshDef","extras","targetNames","isPrimitiveEqual","isObjectEqual","isArrayEqual","getCachedGeometry","newPrimitive","promise","getCachedCombinedGeometry","baseGeometries","getCachedMultiPassGeometry","primitives","baseGeometry","isMultiPassGeometry","primitive0","targets0","primitiveCache","multiplePrimitivesCache","multiPassGeometryCache","fileLoader","markDefs","getMultiDependencies","dependencies","nodeDefs","nodes","skinDefs","skins","meshDefs","meshes","meshReferences","meshUses","skinIndex","skinLength","joints","nodeIndex","nodeLength","nodeDef","skin","cacheKey","dependency","loadScene","loadNode","loadMesh","loadAccessor","loadBufferView","loadBuffer","loadMaterial","loadSkin","loadAnimation","loadCamera","getDependencies","defs","def","types","pendings","bufferIndex","bufferDef","uri","reject","bufferViewDef","bufferViews","accessorIndex","sparse","pendingBufferViews","TypedArray","elementBytes","itemBytes","byteStride","bufferAttribute","ibCacheKey","ib","itemSizeIndices","SCALAR","TypedArrayIndices","byteOffsetIndices","byteOffsetValues","sparseIndices","sparseValues","textureIndex","URL","webkitURL","textureDef","textureExtensions","sourceURI","isObjectURL","createObjectURL","revokeObjectURL","samplers","sampler","textureName","materialDef","materialType","materialExtensions","sgExtension","kmuExtension","metallicFactor","roughnessFactor","metallicRoughnessTexture","alphaMode","alphaCutoff","normalTexture","occlusionTexture","strength","emissiveFactor","emissiveTexture","addPrimitiveAttributes","primitiveDef","gltfAttributeName","threeAttributeName","loadGeometries","isMultiPass","originalPrimitives","geometryPromise","accessor","BufferGeometryUtils","mergeBufferGeometries","meshIndex","originalMaterials","useVertexColors","useFlatShading","useMorphTargets","useMorphNormals","pointsMaterial","lineMaterial","cameraIndex","cameraDef","yfov","aspectRatio","znear","zfar","xmag","ymag","skinDef","skinEntry","inverseBindMatrices","animationIndex","animationDef","channels","input","inputAccessor","outputAccessor","TypedKeyframeTrack","targetName","InterpolantFactoryMethodGLTFCubicSpline","isInterpolantFactoryMethodGLTFCubicSpline","buildNodeHierachy","nodeId","parentObject","allNodes","jointId","jointNode","sceneIndex","sceneDef","nodeIds","exports","module","define","amd","Swiper","activeElement","blur","querySelector","querySelectorAll","getElementById","createEvent","initEvent","createElement","childNodes","setAttribute","getElementsByTagName","location","userAgent","history","CustomEvent","getComputedStyle","getPropertyValue","Image","screen","clearTimeout","innerHTML","nodeType","fn","Class","Dom7","addClass","classList","removeClass","hasClass","contains","toggleClass","attr","removeAttr","dom7ElementDataStorage","webkitTransform","transition","webkitTransitionDuration","transitionDuration","on","dom7EventData","unshift","is","parents","dom7LiveListeners","proxyListener","dom7Listeners","off","trigger","bubbles","cancelable","transitionEnd","outerWidth","styles","offsetWidth","outerHeight","offsetHeight","getBoundingClientRect","clientTop","clientLeft","scrollY","scrollTop","scrollX","scrollLeft","css","each","html","textContent","webkitMatchesSelector","msMatchesSelector","previousSibling","eq","append","firstChild","appendChild","prepend","insertBefore","nextElementSibling","nextAll","previousElementSibling","prevAll","parentNode","closest","find","removeChild","deleteProps","nextTick","getTranslate","WebKitCSSMatrix","MozTransform","OTransform","MsTransform","msTransform","m41","m42","parseUrlQuery","href","isObject","extend","getOwnPropertyDescriptor","touch","Modernizr","DocumentTouch","pointerEvents","pointerEnabled","PointerEvent","prefixedPointerEvents","msPointerEnabled","transforms3d","csstransforms3d","flexbox","observer","passiveListener","gestures","eventsListeners","configurable","once","emit","events","useModulesParams","modules","useModules","use","installModule","proto","static","install","updateSize","$el","clientWidth","clientHeight","isHorizontal","isVertical","updateSlides","$wrapperEl","rtl","wrongRTL","slideClass","virtual","slides","slidesOffsetBefore","slidesOffsetAfter","snapGrid","spaceBetween","E","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesPerColumn","slidesPerView","slidesPerColumnFill","S","C","M","$","L","roundLengths","swiperSlideSize","centeredSlides","slidesPerGroup","effect","setWrapperSize","I","D","slidesGrid","slidesSizesGrid","watchOverflow","checkOverflow","watchSlidesProgress","watchSlidesVisibility","updateSlidesOffset","updateAutoHeight","activeIndex","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","slideVisibleClass","minTranslate","progress","updateProgress","maxTranslate","isBeginning","isEnd","updateSlidesClasses","realIndex","slideActiveClass","slideNextClass","slidePrevClass","slideDuplicateActiveClass","slideDuplicateNextClass","slideDuplicatePrevClass","slideDuplicateClass","updateActiveIndex","snapIndex","normalizeSlideIndex","previousIndex","updateClickedSlide","clickedSlide","clickedIndex","slideToClickedSlide","virtualTranslate","setTranslate","setTransition","transitionStart","autoHeight","animating","slideTo","speed","preventIntercationOnTransition","initialSlide","initialized","allowSlideNext","allowSlidePrev","destroyed","slideToLoop","loopedSlides","slideNext","loopFix","_clientLeft","slidePrev","slideReset","slidesPerViewDynamic","loopCreate","loopFillGroupWithBlank","slideBlankClass","loopAdditionalSlides","cloneNode","loopDestroy","setGrabCursor","simulateTouch","el","cursor","unsetGrabCursor","appendSlide","prependSlide","removeSlide","removeAllSlides","ios","android","androidChrome","desktop","windows","iphone","ipod","ipad","cordova","phonegap","os","osVersion","webView","minimalUi","devicePixelRatio","touchEventsData","touches","originalEvent","isTouchEvent","which","isTouched","isMoved","noSwiping","noSwipingSelector","noSwipingClass","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","startX","startY","touchStartTime","swipeDirection","allowThresholdMove","formElements","allowTouchMove","preventedByNestedSwiper","touchReleaseOnEdges","touchAngle","touchMoveStopPropagation","nested","stopPropagation","startTranslate","allowMomentumBounce","grabCursor","touchRatio","currentTranslate","resistanceRatio","resistance","followFinger","freeMode","velocities","lastClickTime","clickTimeout","freeModeMomentum","velocity","freeModeMinimumVelocity","freeModeMomentumVelocityRatio","freeModeMomentumRatio","freeModeMomentumBounceRatio","freeModeMomentumBounce","freeModeSticky","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","breakpoints","setBreakpoint","preventClicks","preventClicksPropagation","stopImmediatePropagation","attachEvents","touchEvents","wrapperEl","onTouchStart","onTouchMove","onTouchEnd","onClick","touchEventsTarget","passiveListeners","passive","capture","move","detachEvents","getBreakpoint","currentBreakpoint","originalParams","innerWidth","isIE","isSafari","isUiWebView","uniqueNavElements","preloadImages","updateOnImagesReady","containerModifierClass","wrapperClass","runCallbacksOnInit","slide","manipulation","isLocked","navigation","classes","addClasses","classNames","removeClasses","onload","onerror","sizes","srcset","imagesLoaded","imagesToLoad","currentSrc","passedParams","swiper","touchEventsTouch","touchEventsDesktop","__proto__","extendedDefaults","defaults","extendDefaults","O","support","A","browser","H","resize","resizeHandler","orientationChangeHandler","MutationObserver","WebkitMutationObserver","observe","childList","characterData","observers","observeParents","X","Y","renderSlide","lazy","renderExternal","beforeInit","G","handle","keyCode","charCode","shiftKey","altKey","ctrlKey","metaKey","keyboard","onlyInViewport","innerHeight","returnValue","V","R","lastScrollTime","onwheel","implementation","hasFeature","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","mousewheel","forceToAxis","invert","sensitivity","timeout","autoplayDisableOnInteraction","stopAutoplay","releaseOnEdges","getTime","eventsTarged","F","$nextEl","$prevEl","disabledClass","lockClass","nextEl","prevEl","W","pagination","paginationType","bullets","dynamicBullets","bulletSize","dynamicMainBullets","dynamicBulletIndex","bulletActiveClass","currentClass","totalClass","progressbarFillClass","renderCustom","renderBullet","bulletClass","bulletElement","renderFraction","renderProgressbar","clickable","clickableClass","modifierClass","hiddenClass","scrollbar","dragSize","trackSize","$dragEl","hide","display","scrollbarHide","divider","moveDivider","setDragPosition","clientX","clientY","onDragStart","dragTimeout","onDragMove","onDragEnd","snapOnRelease","enableDraggable","disableDraggable","dragClass","dragEl","draggable","setTransform","parallax","K","getDistanceBetweenTouches","onGestureStart","gesture","fakeGestureTouched","fakeGestureMoved","scaleStart","$slideEl","$imageEl","$imageWrapEl","containerClass","maxRatio","isScaling","onGestureChange","scaleMove","currentScale","minRatio","onGestureEnd","changedTouches","touchesStart","slideWidth","slideHeight","touchesCurrent","prevPositionX","prevPositionY","onTransitionEnd","out","in","zoomedSlideClass","U","loadInSlide","elementClass","loadedClass","loadingClass","preloaderClass","initialImageLoaded","loadPrevNext","loadPrevNextAmount","LinearSpline","interpolate","getInterpolateFunction","spline","control","Z","makeElFocusable","addElRole","addElLabel","disableEl","enableEl","onEnterKey","a11y","notify","lastSlideMessage","nextSlideMessage","firstSlideMessage","prevSlideMessage","click","liveRegion","updateNavigation","updatePagination","paginationBulletMessage","Q","pushState","hashNavigation","getPathValues","scrollToSlide","replaceState","setHistoryPopState","pathname","setHistory","slugify","includes","J","onHashCange","setHash","watchState","ee","run","delay","reverseDirection","stopOnLastSlide","waitForTransition","fadeEffect","crossFade","ie","cubeEffect","slideShadows","shadowOffset","shadowScale","se","flipEffect","limitRotation","zIndex","coverflowEffect","modifier","stretch","perspectiveOrigin","re","hideOnClick","toEdge","fromEdge","activeIndexChange","snapIndexChange","slidesLengthChange","snapGridLengthChange","observerUpdate","touchStart","touchEnd","doubleTap","loadOnTransitionStart","scroll","scrollbarDragMove","notificationClass","paginationUpdate","disableOnInteraction","beforeTransitionStart","sliderFirstMove","process","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","runClearTimeout","marker","draining","currentQueue","queueIndex","cleanUpNextTick","drainQueue","args","Item","title","env","argv","versions","noop","addListener","removeListener","removeAllListeners","prependListener","prependOnceListener","cwd","chdir","umask","Util","targetX","targetY","targetZ","requsetId","tween","TWEEN","Tween","onComplete","cancelAnimationFrame","world_vector","getVideoSource","vids","videoEls","mp4UrlMap","ajax","dataType","success","resouce","deCodeArg","yuanhua","decr","srcMap","eval","OrbitControls","minZoom","maxZoom","minPolarAngle","maxPolarAngle","minAzimuthAngle","maxAzimuthAngle","enableDamping","dampingFactor","enableZoom","zoomSpeed","enableRotate","rotateSpeed","enablePan","panSpeed","screenSpacePanning","keyPanSpeed","autoRotate","autoRotateSpeed","enableKeys","UP","BOTTOM","mouseButtons","ORBIT","ZOOM","PAN","target0","position0","zoom0","getPolarAngle","spherical","getAzimuthalAngle","saveState","changeEvent","STATE","NONE","quat","quatInverse","lastPosition","lastQuaternion","rotateLeft","getAutoRotationAngle","sphericalDelta","panOffset","zoomChanged","onContextMenu","onMouseDown","onMouseWheel","onMouseMove","onMouseUp","onKeyDown","startEvent","endEvent","ROTATE","DOLLY","TOUCH_ROTATE","TOUCH_DOLLY_PAN","rotateStart","rotateEnd","rotateDelta","panStart","panEnd","panDelta","dollyStart","dollyEnd","dollyDelta","getZoomScale","rotateUp","panLeft","objectMatrix","panUp","pan","targetDistance","dollyIn","dollyScale","dollyOut","handleMouseDownRotate","handleMouseDownDolly","handleMouseDownPan","handleMouseMoveRotate","handleMouseMoveDolly","handleMouseMovePan","handleMouseUp","handleMouseWheel","handleKeyDown","handleTouchStartRotate","handleTouchStartDollyPan","handleTouchMoveRotate","handleTouchMoveDollyPan","handleTouchEnd","button","noZoom","noRotate","noPan","noKeys","staticMoving","dynamicDampingFactor","controls","projectiveObj","mouse","UTIL","dataInfo","CameraTo","show","posx","negx","posy","negy","posz","negz","tranGeometry","tranMaterial","point1","tranPoint1","point2","tranPoint2","point3","tranPoint3","point4","tranPoint4","point5","tranPoint5","renderRaycasterObj","windowVector","currentProjectiveObjT","timer","scrollFlag","frontCameraSwiper","screenSwiper","planeSwiper","faceSwiper","backCameraSwiper","clearInterval","View","setVideoSrc","handleModal","phoneChange","Video","entryVideo","flag","$phone","$phoneDown","setInterval","videoPause","videoList","$videoCon","swiperScreenCamera","swiperFace","swiperFrontCamera","swiperBackCamera","swiperPlane","videoBox","getElementsByClassName","videos","ipxVideo","ipxVideo4","slideChangeTransitionStart","bundleURL","getBundleURLCached","getBundleURL","err","stack","getBaseURL","bundle","require","updateLink","link","newLink","nextSibling","cssTimeout","reloadCSS","links"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AQn67C1iN;;AACA;;AACA;;AAEA;;IAAY9qD;;AACZ;;AAEA;;;;AAEA;;;;AACA;;;;AACA;;AAEA;;;;AAGA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;;;AANA;AAQA,IAAIjpB,SAAJ,EAAem2G,QAAf;AACA,IAAI7lJ,MAAJ,EAAY0jC,KAAZ,EAAmBV,QAAnB;;AAEA,IAAI8iH,aAAJ,EAAkB;AAClB,IAAI/jH,YAAY,IAAI42B,MAAM49C,SAAV,EAAhB,EAAsC;AACtC,IAAIwvC,QAAQ,IAAIptF,MAAMhtE,OAAV,EAAZ,EAAgC;;AAEhC8Y,SAAS5lB,gBAAT,CAA0B,WAA1B,EAAuC,YAAU;AAC7CY,UAAM29E,cAAN;AACA2oF,UAAMtoK,CAAN,GAAWgC,MAAM20J,OAAN,GAAgB1gF,OAAOs4E,UAAxB,GAAsC,CAAtC,GAA0C,CAApD;AACA+Z,UAAMx7J,CAAN,GAAU,EAAE9K,MAAM40J,OAAN,GAAgB3gF,OAAOs8E,WAAzB,IAAwC,CAAxC,GAA4C,CAAtD;AACH,CAJD,EAIG,KAJH;;AAMAnP,EAAEp8H,QAAF,EAAY+0H,EAAZ,CAAe,OAAf,EAAwB,YAAU;AAC9BqH,MAAE,QAAF,EAAY1xB,OAAZ;AACA02C,eAAWA,SAAShF,UAAT,GAAsB,IAAjC,GAAwC,EAAxC;AACH,CAHD;;AAMA;;;AAGAntF,OAAO70E,gBAAP,CAAyB,OAAzB,EAAkC,YAAU;AACxC,QAAGinK,aAAH,EAAiB;AACbD,iBAAShF,UAAT,GAAsB,KAAtB;AACAhgB,UAAE,aAAF,EAAiBiT,IAAjB;AACA,YAAIsK,OAAO,IAAI4H,cAAJ,CAAShmJ,MAAT,CAAX;AACA,YAAIimJ,WAAWH,cAAcG,QAA7B;;AAEAplB,UAAE,iBAAF,EAAqB1xB,OAArB;AACA0xB,UAAE,cAAF,EAAkB1xB,OAAlB;AACA0xB,UAAE,aAAF,EAAiB1xB,OAAjB;;AAEA,YAAG82C,YAAY,QAAf,EAAyB;AACrB7H,iBAAK8H,QAAL,CAAc,CAAd,EAAiB,CAAjB,EAAoB,GAApB,EAAyB,YAAW;AAChCrlB,kBAAE,SAAF,EAAa5xB,MAAb;AACA4xB,kBAAE,eAAF,EAAmBlI,QAAnB,CAA4B,YAA5B,EAA0CwtB,IAA1C;AACH,aAHD;AAIH;AACD,YAAGF,YAAY,QAAf,EAAyB;AACrB7H,iBAAK8H,QAAL,CAAc,CAAC,EAAf,EAAmB,EAAnB,EAAuB,GAAvB,EAA4B,YAAW;AACnCrlB,kBAAE,SAAF,EAAa5xB,MAAb;AACA;AACA4xB,kBAAE,eAAF,EAAmBlI,QAAnB,CAA4B,YAA5B,EAA0CwtB,IAA1C;AACH,aAJD;AAKH;AACD,YAAGF,YAAY,QAAf,EAAyB;AACrB7H,iBAAK8H,QAAL,CAAc,EAAd,EAAkB,EAAlB,EAAsB,GAAtB,EAA2B,YAAW;AAClCrlB,kBAAE,SAAF,EAAa5xB,MAAb;AACA4xB,kBAAE,eAAF,EAAmBlI,QAAnB,CAA4B,aAA5B,EAA2CwtB,IAA3C;AACH,aAHD;AAIH;AACD,YAAGF,YAAY,aAAf,EAA8B;AAC1B7H,iBAAK8H,QAAL,CAAc,EAAd,EAAkB,EAAlB,EAAsB,CAAC,GAAvB,EAA4B,YAAW;AACnCrlB,kBAAE,SAAF,EAAa5xB,MAAb;AACA4xB,kBAAE,eAAF,EAAmBlI,QAAnB,CAA4B,aAA5B,EAA2CwtB,IAA3C;AACH,aAHD;AAIH;AACD,YAAGF,YAAY,KAAf,EAAsB;AAClB7H,iBAAK8H,QAAL,CAAc,CAAd,EAAiB,CAAjB,EAAoB,CAAC,GAArB,EAA0B,YAAW;AACjCrlB,kBAAE,SAAF,EAAa5xB,MAAb;AACA4xB,kBAAE,eAAF,EAAmBlI,QAAnB,CAA4B,aAA5B,EAA2CwtB,IAA3C;AACH,aAHD;AAIH;AACJ;AACJ,CA3CD,EA2CG,KA3CH;;AA6CA,SAASz+G,IAAT,GAAgB;AACZgI,gBAAYjrC,SAASgzH,aAAT,CAAwB,KAAxB,CAAZ;AACAhzH,aAASmiH,IAAT,CAAc+U,WAAd,CAA2BjsF,SAA3B;;AAEA;AACA;AACA;AACA;;AAEA1vC,aAAS,IAAI24D,MAAM5G,iBAAV,CAA6B,EAA7B,EAAiC2B,OAAOs4E,UAAP,GAAoBt4E,OAAOs8E,WAA5D,EAAyE,GAAzE,EAA8E,IAA9E,CAAT;AACAhwI,WAAO1H,QAAP,CAAgBrG,CAAhB,GAAoB,GAApB;AACA+N,WAAO1H,QAAP,CAAgB/N,CAAhB,GAAoB,CAApB;AACAyV,WAAO1H,QAAP,CAAgB7a,CAAhB,GAAoB,CAApB;;AAEA,QAAGi2E,OAAOmkE,QAAP,CAAgB32C,MAAnB,EAA2B;AACvB2kE,mBAAW,IAAIltF,MAAMinF,aAAV,CAAyB5/I,MAAzB,CAAX;AACA6lJ,iBAAShF,UAAT,GAAsB,IAAtB;AACAgF,iBAAS/E,eAAT,GAA2B,CAA3B;AACA+E,iBAASpF,SAAT,GAAqB,KAArB;AACA;AACAoF,iBAAS7hD,WAAT,GAAuB,GAAvB;AACA6hD,iBAASrlH,WAAT,GAAuB,GAAvB;AACH;;AAEDkD,YAAQ,IAAIi1B,MAAMiM,KAAV,EAAR;;AAEAlhC,UAAMh3C,GAAN,CAAW,IAAIisE,MAAMswB,eAAV,CAA0B,QAA1B,EAAoC,QAApC,EAA8C,CAA9C,CAAX;;AAEA;AACA,QAAIp5C,OAAO,cAAX;AACA,QAAI7sC,SAAS,MAAb;AACA,QAAIsY,SAAS,IAAIq9C,MAAMmoB,iBAAV,GAA8BjD,IAA9B,CAAoC,CAC7CuoE,cAD6C,EACvCC,cADuC,EAE7CC,cAF6C,EAEvCC,cAFuC,EAG7CC,cAH6C,EAGvCC,cAHuC,CAApC,CAAb;AAKA;AACA;AACH;AACG;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAIl9I,WAAW,IAAIovD,MAAMggB,cAAV,CAAyB,CAAzB,EAA2B,EAA3B,EAA8B,EAA9B,CAAf,CAhDY,CAgDqC;AACjD,QAAI+tE,eAAe,IAAI/tF,MAAMggB,cAAV,CAAyB,CAAzB,EAA2B,EAA3B,EAA8B,EAA9B,CAAnB,CAjDY,CAiDyC;;AAErD,QAAI5vD,WAAW,IAAI4vC,MAAMphB,mBAAV,CAA8B,EAACt+B,OAAO,QAAR,EAAkBqf,aAAa,IAA/B,EAAqCvd,SAAS,GAA9C,EAA9B,CAAf;AACA,QAAI4rI,eAAe,IAAIhuF,MAAMphB,mBAAV,CAA8B,EAACt+B,OAAO,QAAR,EAAkBqf,aAAa,IAA/B,EAAqCvd,SAAS,CAA9C,EAA9B,CAAnB;;AAEA,QAAI6rI,SAAS,IAAIjuF,MAAMl4B,IAAV,CAAgBl3B,QAAhB,EAA0Bwf,QAA1B,CAAb;AACA69H,WAAOtuJ,QAAP,CAAgBzM,GAAhB,CAAoB,CAApB,EAAsB,CAAtB,EAAwB,CAAxB;AACA63C,UAAMh3C,GAAN,CAAWk6J,MAAX;;AAEA,QAAIC,aAAa,IAAIluF,MAAMl4B,IAAV,CAAgBimH,YAAhB,EAA8BC,YAA9B,CAAjB;AACAE,eAAWvuJ,QAAX,CAAoBzM,GAApB,CAAwB,CAAxB,EAA0B,CAA1B,EAA4B,CAA5B;AACAg7J,eAAWZ,QAAX,GAAsB,QAAtB;AACAviH,UAAMh3C,GAAN,CAAUm6J,UAAV;;AAEA,QAAIC,SAAS,IAAInuF,MAAMl4B,IAAV,CAAgBl3B,QAAhB,EAA0Bwf,QAA1B,CAAb;AACA+9H,WAAOxuJ,QAAP,CAAgBzM,GAAhB,CAAoB,CAAC,EAArB,EAAwB,GAAxB,EAA4B,EAA5B;AACA63C,UAAMh3C,GAAN,CAAWo6J,MAAX;;AAEA,QAAIC,aAAa,IAAIpuF,MAAMl4B,IAAV,CAAgBimH,YAAhB,EAA8BC,YAA9B,CAAjB;AACAI,eAAWzuJ,QAAX,CAAoBzM,GAApB,CAAwB,CAAC,EAAzB,EAA4B,GAA5B,EAAgC,EAAhC;AACAk7J,eAAWd,QAAX,GAAsB,QAAtB;AACAviH,UAAMh3C,GAAN,CAAUq6J,UAAV;;AAEA,QAAIC,SAAS,IAAIruF,MAAMl4B,IAAV,CAAgBl3B,QAAhB,EAA0Bwf,QAA1B,CAAb;AACAi+H,WAAO1uJ,QAAP,CAAgBzM,GAAhB,CAAoB,EAApB,EAAuB,GAAvB,EAA2B,EAA3B;AACA63C,UAAMh3C,GAAN,CAAWs6J,MAAX;;AAEA,QAAIC,aAAa,IAAItuF,MAAMl4B,IAAV,CAAgBimH,YAAhB,EAA8BC,YAA9B,CAAjB;AACAM,eAAW3uJ,QAAX,CAAoBzM,GAApB,CAAwB,EAAxB,EAA2B,GAA3B,EAA+B,EAA/B;AACAo7J,eAAWhB,QAAX,GAAsB,QAAtB;AACAviH,UAAMh3C,GAAN,CAAUu6J,UAAV;;AAGA,QAAIC,SAAS,IAAIvuF,MAAMl4B,IAAV,CAAgBl3B,QAAhB,EAA0Bwf,QAA1B,CAAb;AACAm+H,WAAO5uJ,QAAP,CAAgBzM,GAAhB,CAAoB,EAApB,EAAuB,EAAvB,EAA0B,CAAC,EAA3B;AACA63C,UAAMh3C,GAAN,CAAWw6J,MAAX;;AAEA,QAAIC,aAAa,IAAIxuF,MAAMl4B,IAAV,CAAgBimH,YAAhB,EAA8BC,YAA9B,CAAjB;AACAQ,eAAW7uJ,QAAX,CAAoBzM,GAApB,CAAwB,EAAxB,EAA2B,EAA3B,EAA8B,CAAC,EAA/B;AACAs7J,eAAWlB,QAAX,GAAsB,aAAtB;AACAviH,UAAMh3C,GAAN,CAAUy6J,UAAV;;AAEA,QAAIC,SAAS,IAAIzuF,MAAMl4B,IAAV,CAAgBl3B,QAAhB,EAA0Bwf,QAA1B,CAAb;AACAq+H,WAAO9uJ,QAAP,CAAgBzM,GAAhB,CAAoB,CAAC,EAArB,EAAwB,EAAxB,EAA2B,CAAC,EAA5B;AACA63C,UAAMh3C,GAAN,CAAW06J,MAAX;;AAEA,QAAIC,aAAa,IAAI1uF,MAAMl4B,IAAV,CAAgBimH,YAAhB,EAA8BC,YAA9B,CAAjB;AACAU,eAAW/uJ,QAAX,CAAoBzM,GAApB,CAAwB,CAAC,EAAzB,EAA4B,EAA5B,EAA+B,CAAC,EAAhC;AACAw7J,eAAWpB,QAAX,GAAsB,KAAtB;AACAviH,UAAMh3C,GAAN,CAAU26J,UAAV;;AAGA;AACA,QAAItnE,SAAS,IAAIpnB,MAAMgrD,UAAV,EAAb;AACA5jC,WAAOlC,IAAP,CAAa,oBAAb,EAAmC,UAAWl1E,MAAX,EAAoB;AACnDA,eAAO+6B,KAAP,CAAar6B,QAAb,CAAuB,UAAWue,KAAX,EAAmB;AACtC,gBAAKA,MAAMwH,MAAX,EAAoB;AAChBxH,sBAAMmB,QAAN,CAAezN,MAAf,GAAwBA,MAAxB;AACA1uB,wBAAQpB,GAAR,CAAYo8B,KAAZ;AACH;AACJ,SALD;;AAOA8b,cAAMh3C,GAAN,CAAWic,OAAO+6B,KAAlB;AACH,KATD;;AAWAV,eAAW,IAAI21B,MAAMC,aAAV,CAAwB;AAC/BM,mBAAW,IADoB;AAE/B/pE,eAAO;AAFwB,KAAxB,CAAX;AAIA6zC,aAASsB,aAAT,CAAuB,QAAvB,EAAiC,CAAjC;AACAtB,aAASu5B,aAAT,CAAwB7I,OAAOqzE,gBAA/B;AACA/jG,aAASj8B,OAAT,CAAkB2sD,OAAOs4E,UAAzB,EAAqCt4E,OAAOs8E,WAA5C;AACAtgG,cAAUisF,WAAV,CAAuB34F,SAAS02B,UAAhC;AACAhG,WAAO70E,gBAAP,CAAyB,QAAzB,EAAmCyvJ,MAAnC,EAA2C,KAA3C;AACH;AACD,SAASA,MAAT,GAAkB;AACdtuI,WAAOiyD,MAAP,GAAgByB,OAAOs4E,UAAP,GAAoBt4E,OAAOs8E,WAA3C;AACAhwI,WAAO4pB,sBAAP;AACAoZ,aAASj8B,OAAT,CAAkB2sD,OAAOs4E,UAAzB,EAAqCt4E,OAAOs8E,WAA5C;AACH;AACD,SAAS7uB,OAAT,GAAmB;AACf,QAAG0kC,QAAH,EAAa;AACTA,iBAASvpJ,MAAT;AACH;AACDgrJ,uBAAmBvlH,SAAnB,EAA6B2B,KAA7B,EAAmC1jC,MAAnC,EAA0C+lJ,KAA1C,EAJe,CAIkC;AACjD/iH,aAASQ,MAAT,CAAiBE,KAAjB,EAAwB1jC,MAAxB;;AAEA;AACA,QAAIo+I,OAAO,IAAI4H,cAAJ,CAAShmJ,MAAT,CAAX;AACAo+I,SAAKmJ,YAAL,CAAkB,CAAlB,EAAqB,CAArB,EAAwB,CAAxB,EAA2B,QAA3B;AACAnJ,SAAKmJ,YAAL,CAAkB,CAAC,EAAnB,EAAsB,GAAtB,EAA0B,EAA1B,EAA8B,QAA9B;AACAnJ,SAAKmJ,YAAL,CAAkB,EAAlB,EAAqB,GAArB,EAAyB,EAAzB,EAA6B,QAA7B;AACAnJ,SAAKmJ,YAAL,CAAkB,EAAlB,EAAqB,EAArB,EAAwB,CAAC,EAAzB,EAA6B,QAA7B;AACAnJ,SAAKmJ,YAAL,CAAkB,CAAC,EAAnB,EAAsB,EAAtB,EAAyB,CAAC,EAA1B,EAA8B,QAA9B;;AAEAnmI,0BAAuB+/F,OAAvB;AACH;;AAED;;;AAGA,SAASmmC,kBAAT,CAA4BvlH,SAA5B,EAAsC2B,KAAtC,EAA4C1jC,MAA5C,EAAmD+lJ,KAAnD,EAA0D;AACtDhkH,cAAU40E,aAAV,CAAwBovC,KAAxB,EAA+B/lJ,MAA/B;AACA,QAAIkiC,aAAaH,UAAU80E,gBAAV,CAA2BnzE,MAAMre,QAAjC,CAAjB;AACA,QAAI6c,WAAW3jD,MAAX,GAAoB,CAAxB,EAA2B;AACvB,YAAIipK,wBAAwBtlH,WAAW,CAAX,EAAcv5B,MAA1C;AACA,YAAIm9I,iBAAiB0B,qBAArB,EAA4C;AACxC,gBAAIA,iCAAiC7uF,MAAMokD,UAAxC,IAAwDyqC,iCAAiC7uF,MAAMsgD,UAAlG,EAA8G;AAC1G;AACA;AACH;AACD6sC,4BAAgB5jH,WAAW,CAAX,EAAcv5B,MAA9B;AACH;AACJ,KATD,MASO;AACHm9I,wBAAgB,IAAhB;AACH;AACJ;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGAp+G;AACA;;AAEA;;AAEA;AACA,IAAI+/G,KAAJ;AACA,IAAIC,aAAa,KAAjB;AACA,IAAIC,oBAAoB,IAAxB;AACA,IAAIC,eAAe,IAAnB;AACA,IAAIC,cAAc,IAAlB;AACA,IAAIC,aAAa,IAAjB;AACA,IAAIC,mBAAmB,IAAvB;;AAGA;AACA,IAAG,CAACr0F,OAAOmkE,QAAP,CAAgB32C,MAAjB,IAA2B,CAAC2kE,QAA/B,EAAyC;AACrChlB,MAAEp8H,QAAF,EAAY+0H,EAAZ,CAAe,2BAAf,EAA4C,UAAU5rI,CAAV,EAAa;AACrD;AACA;AACAA,UAAEwvE,cAAF;AACA,YAAI//E,QAAQuQ,EAAEs5I,aAAF,CAAgBsJ,UAAhB,IAA8B,CAAC5iJ,EAAEs5I,aAAF,CAAgBl9D,MAA3D;AACA;AACA;AACA,YAAIj8D,QAAQ7wB,KAAK2M,GAAL,CAAS,CAAC,CAAV,EAAa3M,KAAK0M,GAAL,CAAS,CAAT,EAAYvM,KAAZ,CAAb,CAAZ;AACA;AACA,YAAG0wB,QAAQ,CAAR,IAAa,CAAC25I,UAAjB,EAA6B;AACzBM,0BAAcP,KAAd;AACA5mB,cAAE,kBAAF,EAAsB1xB,OAAtB;AACA0xB,cAAE,aAAF,EAAiB5xB,MAAjB;AACAxqG,qBAAS6yH,cAAT,CAAwB,aAAxB,EAAuCh1B,IAAvC;AACA,gBAAG,CAACujD,QAAJ,EAAc;AACVA,2BAAW,IAAIltF,MAAMinF,aAAV,CAAyB5/I,MAAzB,CAAX;AACA6lJ,yBAAShF,UAAT,GAAsB,IAAtB;AACAgF,yBAAS/E,eAAT,GAA2B,CAA3B;AACA+E,yBAASpF,SAAT,GAAqB,KAArB;AACA;AACAoF,yBAAS7hD,WAAT,GAAuB,GAAvB;AACA6hD,yBAASrlH,WAAT,GAAuB,GAAvB;AACH;AACDknH,yBAAa,IAAb;AACAvmC;AACH;AACJ,KA1BD;AA2BH;;AAED,IAAI8mC,OAAO;AACPvgH,QADO,kBACA;AACH,aAAKwgH,WAAL;AACA,aAAKC,WAAL;;AAEA;AACA,YAAIjnE,SAASxtB,OAAOmkE,QAAP,CAAgB32C,MAA7B;AACA,YAAGA,MAAH,EAAW;AACP2/C,cAAE,kBAAF,EAAsBiT,IAAtB;AACA3yB;AACH,SAHD,MAGO;AACH,iBAAKinC,WAAL;AACH;;AAEDvnB,UAAE,QAAF,EAAY6X,KAAZ,CAAkB,YAAW;AACzBsP,0BAAcP,KAAd;AACA5mB,cAAE,kBAAF,EAAsB1xB,OAAtB;AACA0xB,cAAE,aAAF,EAAiB5xB,MAAjB;AACAxqG,qBAAS6yH,cAAT,CAAwB,aAAxB,EAAuCh1B,IAAvC;AACA,gBAAG,CAACujD,QAAJ,EAAc;AACVA,2BAAW,IAAIltF,MAAMinF,aAAV,CAAyB5/I,MAAzB,CAAX;AACA6lJ,yBAAShF,UAAT,GAAsB,IAAtB;AACAgF,yBAAS/E,eAAT,GAA2B,CAA3B;AACA+E,yBAASpF,SAAT,GAAqB,KAArB;AACA;AACAoF,yBAAS7hD,WAAT,GAAuB,GAAvB;AACA6hD,yBAASrlH,WAAT,GAAuB,GAAvB;AACH;AACD2gF;AACH,SAfD;AAgBH,KA9BM;AA+BP+mC,eA/BO,yBA+BO;AACV,YAAIlJ,OAAO,CAAC,OAAD,EAAU,OAAV,EAAmB,OAAnB,EAA4B,OAA5B,EAAqC,OAArC,EAA8C,OAA9C,EAAsD,OAAtD,EAA8D,OAA9D,EACC,OADD,EACU,OADV,EACkB,OADlB,CAAX;AAEA,YAAIC,WAAW;AACX,uBAAW,aADA;AAEX,uBAAW,aAFA;AAGX,uBAAW,aAHA;AAIX,uBAAW,mBAJA;AAKX,uBAAW,oBALA;AAMX,uBAAW,qBANA;AAOX,uBAAW,qBAPA;AAQX,uBAAW,qBARA;AASX,uBAAW,eATA;AAUX,uBAAW,eAVA;AAWX,uBAAW;AAXA,SAAf;AAaAoJ,wBAAMtJ,cAAN,CAAqBC,IAArB,EAA2BC,QAA3B;;AAEA,YAAIqJ,aAAa7jJ,SAAS6yH,cAAT,CAAwB,aAAxB,CAAjB;AACAgxB,mBAAWzpK,gBAAX,CAA4B,OAA5B,EAAqC,YAAW;AAC5CgiJ,cAAE,aAAF,EAAiBiT,IAAjB;AACH,SAFD;;AAIAjT,UAAE,iBAAF,EAAqB6X,KAArB,CAA2B,YAAU;AACjC4P,uBAAW5lD,KAAX;AACAm+B,cAAE,aAAF,EAAiBiT,IAAjB;AACH,SAHD;AAIH,KA1DM;AA2DPsU,eA3DO,yBA2DO;AACV,YAAIG,OAAO,IAAX;AACA,YAAIC,SAAS3nB,EAAE,aAAF,CAAb;AACA,YAAI4nB,aAAa5nB,EAAE,kBAAF,CAAjB;AACA4mB,gBAAQiB,YAAY,YAAM;AACtB,gBAAGH,IAAH,EAAS;AACLA,uBAAO,KAAP;AACAC,uBAAOr5C,OAAP,CAAe,MAAf;AACAs5C,2BAAWx5C,MAAX,CAAkB,MAAlB;AACH,aAJD,MAIO;AACHs5C,uBAAO,IAAP;AACAC,uBAAOv5C,MAAP,CAAc,MAAd;AACAw5C,2BAAWt5C,OAAX,CAAmB,MAAnB;AACH;AACJ,SAVO,EAUL,IAVK,CAAR;AAWH,KA1EM;AA2EPw5C,cA3EO,wBA2EM;AACT,YAAIC,YAAYnkJ,SAASmzH,oBAAT,CAA8B,OAA9B,CAAhB;AACA,aAAI,IAAIh4I,IAAI,CAAZ,EAAeA,IAAIgpK,UAAUrqK,MAA7B,EAAqCqB,GAArC,EAA0C;AACtCgpK,sBAAUhpK,CAAV,EAAa8iH,KAAb;AACH;AACJ,KAhFM;AAiFPylD,eAjFO,yBAiFO;;AAEV,YAAIU,YAAYhoB,EAAE,kBAAF,CAAhB;;AAEAA,UAAE,mBAAF,EAAuB6X,KAAvB,CAA6B,YAAW;AACpC7X,cAAE,IAAF,EAAQz7G,MAAR,GAAiB0uH,IAAjB;AACA+U,sBAAUzsB,IAAV,CAAe,OAAf,EAAwB0X,IAAxB;AACA,gBAAI8U,YAAYnkJ,SAASmzH,oBAAT,CAA8B,OAA9B,CAAhB;AACA,iBAAI,IAAIh4I,IAAI,CAAZ,EAAeA,IAAIgpK,UAAUrqK,MAA7B,EAAqCqB,GAArC,EAA0C;AACtCgpK,0BAAUhpK,CAAV,EAAa8iH,KAAb;AACH;AACJ,SAPD;;AASA;AACAm+B,UAAE,iBAAF,EAAqB6X,KAArB,CAA2B,YAAW;AAClC7X,cAAE,gBAAF,EAAoBslB,IAApB;AACA0C,sBAAU1C,IAAV;AACA1hJ,qBAAS6yH,cAAT,CAAwB,eAAxB,EAAyCh1B,IAAzC;AACH,SAJD;AAKAu+B,UAAE,mBAAF,EAAuB6X,KAAvB,CAA6B,YAAW;AACpC7X,cAAE,gBAAF,EAAoBhI,WAApB,CAAgC,aAAhC,EAA+CF,QAA/C,CAAwD,UAAxD,EAAoEwtB,IAApE;AACA,gBAAG,CAACyB,YAAJ,EAAkB;AACdK,qBAAKa,kBAAL;AACH;AACDrkJ,qBAAS6yH,cAAT,CAAwB,eAAxB,EAAyC32B,WAAzC,GAAuD,CAAvD;AACAl8F,qBAAS6yH,cAAT,CAAwB,eAAxB,EAAyCh1B,IAAzC;AACH,SAPD;AAQAu+B,UAAE,sBAAF,EAA0B6X,KAA1B,CAAgC,YAAW;AACvCuP,iBAAKU,UAAL;AACA9nB,cAAE,gBAAF,EAAoBhI,WAApB,CAAgC,UAAhC,EAA4CF,QAA5C,CAAqD,aAArD;AACAivB,yBAAa1jB,OAAb,CAAqB,CAArB,EAAwB,CAAxB,EAA2B,KAA3B;AACH,SAJD;AAKArD,UAAE,sBAAF,EAA0B6X,KAA1B,CAAgC,YAAW;AACvCj0I,qBAAS6yH,cAAT,CAAwB,eAAxB,EAAyC32B,WAAzC,GAAuD,CAAvD;AACAl8F,qBAAS6yH,cAAT,CAAwB,eAAxB,EAAyCh1B,IAAzC;AACH,SAHD;;AAKA;AACAu+B,UAAE,iBAAF,EAAqB6X,KAArB,CAA2B,YAAW;AAClC7X,cAAE,cAAF,EAAkBslB,IAAlB;AACA0C,sBAAU1C,IAAV;AACA1hJ,qBAAS6yH,cAAT,CAAwB,aAAxB,EAAuCh1B,IAAvC;AACH,SAJD;AAKAu+B,UAAE,iBAAF,EAAqB6X,KAArB,CAA2B,YAAW;AAClC7X,cAAE,cAAF,EAAkBslB,IAAlB;AACA0C,sBAAU1C,IAAV;AACA1hJ,qBAAS6yH,cAAT,CAAwB,aAAxB,EAAuCh1B,IAAvC;AACH,SAJD;AAKAu+B,UAAE,iBAAF,EAAqB6X,KAArB,CAA2B,YAAW;AAClC7X,cAAE,cAAF,EAAkBhI,WAAlB,CAA8B,aAA9B,EAA6CF,QAA7C,CAAsD,UAAtD,EAAkEwtB,IAAlE;AACA,gBAAG,CAAC2B,UAAJ,EAAgB;AACZG,qBAAKc,UAAL;AACH;AACJ,SALD;AAMAloB,UAAE,oBAAF,EAAwB6X,KAAxB,CAA8B,YAAW;AACrC7X,cAAE,cAAF,EAAkBhI,WAAlB,CAA8B,UAA9B,EAA0CF,QAA1C,CAAmD,aAAnD;AACAmvB,uBAAW5jB,OAAX,CAAmB,CAAnB,EAAsB,CAAtB,EAAyB,KAAzB;AACH,SAHD;;AAKA;AACArD,UAAE,gBAAF,EAAoB6X,KAApB,CAA0B,YAAW;AACjC7X,cAAE,qBAAF,EAAyBslB,IAAzB;AACA0C,sBAAU1C,IAAV;AACA1hJ,qBAAS6yH,cAAT,CAAwB,oBAAxB,EAA8Ch1B,IAA9C;AACH,SAJD;;AAMAu+B,UAAE,iBAAF,EAAqB6X,KAArB,CAA2B,YAAW;AAClC7X,cAAE,sBAAF,EAA0BslB,IAA1B;AACA0C,sBAAU1C,IAAV;AACA1hJ,qBAAS6yH,cAAT,CAAwB,qBAAxB,EAA+Ch1B,IAA/C;AACH,SAJD;AAKAu+B,UAAE,mBAAF,EAAuB6X,KAAvB,CAA6B,YAAW;AACpC7X,cAAE,gBAAF,EAAoBhI,WAApB,CAAgC,aAAhC,EAA+CF,QAA/C,CAAwD,UAAxD,EAAoEwtB,IAApE;AACA,gBAAG,CAACwB,iBAAJ,EAAuB;AACnBM,qBAAKe,iBAAL;AACH;AACJ,SALD;AAMAnoB,UAAE,sBAAF,EAA0B6X,KAA1B,CAAgC,YAAW;AACvCuP,iBAAKU,UAAL;AACA9nB,cAAE,gBAAF,EAAoBhI,WAApB,CAAgC,UAAhC,EAA4CF,QAA5C,CAAqD,aAArD;AACAgvB,8BAAkBzjB,OAAlB,CAA0B,CAA1B,EAA6B,CAA7B,EAAgC,KAAhC;AACH,SAJD;;AAMA;AACArD,UAAE,gBAAF,EAAoB6X,KAApB,CAA0B,YAAW;AACjC7X,cAAE,oBAAF,EAAwBslB,IAAxB;AACA0C,sBAAU1C,IAAV;AACA1hJ,qBAAS6yH,cAAT,CAAwB,mBAAxB,EAA6Ch1B,IAA7C;AACH,SAJD;AAKAu+B,UAAE,uBAAF,EAA2B6X,KAA3B,CAAiC,YAAW;AACxC7X,cAAE,qBAAF,EAAyBhI,WAAzB,CAAqC,aAArC,EAAoDF,QAApD,CAA6D,UAA7D,EAAyEwtB,IAAzE;AACA,gBAAG,CAAC4B,gBAAJ,EAAsB;AAClBE,qBAAKgB,gBAAL;AACH;AACJ,SALD;AAMApoB,UAAE,0BAAF,EAA8B6X,KAA9B,CAAoC,YAAW;AAC3C7X,cAAE,qBAAF,EAAyBhI,WAAzB,CAAqC,UAArC,EAAiDF,QAAjD,CAA0D,aAA1D;AACAovB,6BAAiB7jB,OAAjB,CAAyB,CAAzB,EAA4B,CAA5B,EAA+B,KAA/B;AACH,SAHD;;AAKA;AACArD,UAAE,kBAAF,EAAsB6X,KAAtB,CAA4B,YAAW;AACnC7X,cAAE,eAAF,EAAmBhI,WAAnB,CAA+B,aAA/B,EAA8CF,QAA9C,CAAuD,UAAvD,EAAmEwtB,IAAnE;AACA,gBAAG,CAAC0B,WAAJ,EAAiB;AACbI,qBAAKiB,WAAL;AACH;AACJ,SALD;AAMAroB,UAAE,qBAAF,EAAyB6X,KAAzB,CAA+B,YAAW;AACtC7X,cAAE,eAAF,EAAmBhI,WAAnB,CAA+B,UAA/B,EAA2CF,QAA3C,CAAoD,aAApD;AACAkvB,wBAAY3jB,OAAZ,CAAoB,CAApB,EAAuB,CAAvB,EAA0B,KAA1B;AACH,SAHD;;AAKA;AACA,YAAIilB,WAAW1kJ,SAAS2kJ,sBAAT,CAAgC,iBAAhC,EAAmD,CAAnD,CAAf;AACA,YAAIC,SAASF,SAASvxB,oBAAT,CAA8B,OAA9B,CAAb;AACA,aAAI,IAAIh4I,IAAI,CAAZ,EAAeA,IAAIypK,OAAO9qK,MAA1B,EAAkCqB,GAAlC,EAAuC;AACnCypK,mBAAOzpK,CAAP,EAAUf,gBAAV,CAA2B,OAA3B,EAAoC,YAAW;AAC3CgqK,0BAAU/U,IAAV;AACA+U,0BAAUzsB,IAAV,CAAe,OAAf,EAAwB0X,IAAxB;AACH,aAHD;AAIH;;AAED;AACAjT,UAAE,gBAAF,EAAoB6X,KAApB,CAA0B,YAAW;AACjC7X,cAAE,gBAAF,EAAoBslB,IAApB;AACA0C,sBAAU1C,IAAV;AACA1hJ,qBAAS6yH,cAAT,CAAwB,eAAxB,EAAyCh1B,IAAzC;AACH,SAJD;;AAMA;AACAu+B,UAAE,kBAAF,EAAsBzE,IAAtB,CAA2B,QAA3B,EAAqCsc,KAArC,CAA2C,UAAS9qJ,CAAT,EAAY;AACnDi4J,qBAASxF,UAAT,GAAsB,KAAtB;AACA,mBAAO,KAAP;AACH,SAHD;AAIAxf,UAAE,mBAAF,EAAuB6X,KAAvB,CAA6B,YAAW;AACpCmN,qBAASxF,UAAT,GAAsB,IAAtB;AACA,mBAAO,KAAP;AACH,SAHD;AAIH,KA3NM;AA4NP2I,qBA5NO,+BA4Na;;AAEhB,YAAIM,WAAW7kJ,SAAS6yH,cAAT,CAAwB,qBAAxB,CAAf;AACA,YAAIiyB,YAAY9kJ,SAAS6yH,cAAT,CAAwB,qBAAxB,CAAhB;AACA;AACAqwB,4BAAoB,IAAI1wB,gBAAJ,CAAW,sBAAX,EAAkC;AAClDnpH,uBAAY,UADsC;AAElDq2H,mBAAM,GAF4C;AAGlDgN,wBAAY,IAHsC;AAIlDkB,wBAAY;AACR3M,oBAAI,oBADI;AAER4N,2BAAW;AAFH,aAJsC;AAQlD9Z,gBAAG;AACCgwB,4CAA4B,sCAAU;AAClC;AACA,wBAAG,KAAKznB,WAAL,IAAoB,CAAvB,EAA0B;AACtBunB,iCAAShnD,IAAT;AACH,qBAFD,MAEO;AACHgnD,iCAAS5mD,KAAT;AACH;;AAED,wBAAG,KAAKq/B,WAAL,IAAoB,CAAvB,EAA0B;AACtBwnB,kCAAUjnD,IAAV;AACH,qBAFD,MAEO;AACHinD,kCAAU7mD,KAAV;AACH;AACJ;AAdF;AAR+C,SAAlC,CAApB;;AA0BA;AACAm+B,UAAE,qBAAF,EAAyB6X,KAAzB,CAA+B,YAAW;AACtC4Q,qBAAS3oD,WAAT,GAAuB,CAAvB;AACA2oD,qBAAShnD,IAAT;AACH,SAHD;AAIAu+B,UAAE,qBAAF,EAAyB6X,KAAzB,CAA+B,YAAW;AACtC6Q,sBAAU5oD,WAAV,GAAwB,CAAxB;AACA4oD,sBAAUjnD,IAAV;AACH,SAHD;AAIH,KApQM;AAqQPwmD,sBArQO,gCAqQc;AACjB,YAAIQ,WAAW7kJ,SAAS6yH,cAAT,CAAwB,eAAxB,CAAf;;AAEAswB,uBAAe,IAAI3wB,gBAAJ,CAAW,gBAAX,EAA4B;AACvCnpH,uBAAY,UAD2B;AAEvCq2H,mBAAM,GAFiC;AAGvCgN,wBAAY,IAH2B;AAIvCkB,wBAAY;AACR3M,oBAAI,oBADI;AAER4N,2BAAW;AAFH,aAJ2B;AAQvC9Z,gBAAG;AACCgwB,4CAA4B,sCAAU;AAClC,wBAAG,KAAKznB,WAAL,IAAoB,CAAvB,EAA0B;AACtBhkD,mCAAW,YAAM;AACburE,qCAAShnD,IAAT;AACH,yBAFD,EAEG,GAFH;AAGH,qBAJD,MAIO;AACHgnD,iCAAS5mD,KAAT;AACH;AACJ;AATF;AARoC,SAA5B,CAAf;AAoBH,KA5RM;AA6RPwmD,eA7RO,yBA6RO;AACVrB,sBAAc,IAAI5wB,gBAAJ,CAAW,eAAX,EAA2B;AACrCnpH,uBAAY,UADyB;AAErCq2H,mBAAM,GAF+B;AAGrCgN,wBAAY,IAHyB;AAIrCkB,wBAAY;AACR3M,oBAAI,oBADI;AAER4N,2BAAW;AAFH,aAJyB;AAQrC9Z,gBAAG;AARkC,SAA3B,CAAd;AAWH,KAzSM;AA0SPuvB,cA1SO,wBA0SM;AACTjB,qBAAa,IAAI7wB,gBAAJ,CAAW,cAAX,EAA0B;AACnCnpH,uBAAY,UADuB;AAEnCq2H,mBAAM,GAF6B;AAGnCgN,wBAAY,IAHuB;AAInCkB,wBAAY;AACR3M,oBAAI,oBADI;AAER4N,2BAAW;AAFH,aAJuB;AAQnC9Z,gBAAG;AARgC,SAA1B,CAAb;AAWH,KAtTM;AAuTPyvB,oBAvTO,8BAuTY;AACflB,2BAAmB,IAAI9wB,gBAAJ,CAAW,qBAAX,EAAiC;AAChDnpH,uBAAY,UADoC;AAEhDq2H,mBAAM,GAF0C;AAGhDgN,wBAAY,IAHoC;AAIhDkB,wBAAY;AACR3M,oBAAI,oBADI;AAER4N,2BAAW;AAFH,aAJoC;AAQhD9Z,gBAAG;AAR6C,SAAjC,CAAnB;AAWH;AAnUM,CAAX;;AAsUAyuB,KAAKvgH,IAAL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","file":"iphonex.7350a5dc.map","sourceRoot":"..","sourcesContent":["// Polyfills\n\nif ( Number.EPSILON === undefined ) {\n\n\tNumber.EPSILON = Math.pow( 2, - 52 );\n\n}\n\nif ( Number.isInteger === undefined ) {\n\n\t// Missing in IE\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\n\n\tNumber.isInteger = function ( value ) {\n\n\t\treturn typeof value === 'number' && isFinite( value ) && Math.floor( value ) === value;\n\n\t};\n\n}\n\n//\n\nif ( Math.sign === undefined ) {\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign\n\n\tMath.sign = function ( x ) {\n\n\t\treturn ( x < 0 ) ? - 1 : ( x > 0 ) ? 1 : + x;\n\n\t};\n\n}\n\nif ( 'name' in Function.prototype === false ) {\n\n\t// Missing in IE\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name\n\n\tObject.defineProperty( Function.prototype, 'name', {\n\n\t\tget: function () {\n\n\t\t\treturn this.toString().match( /^\\s*function\\s*([^\\(\\s]*)/ )[ 1 ];\n\n\t\t}\n\n\t} );\n\n}\n\nif ( Object.assign === undefined ) {\n\n\t// Missing in IE\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n\n\t( function () {\n\n\t\tObject.assign = function ( target ) {\n\n\t\t\tif ( target === undefined || target === null ) {\n\n\t\t\t\tthrow new TypeError( 'Cannot convert undefined or null to object' );\n\n\t\t\t}\n\n\t\t\tvar output = Object( target );\n\n\t\t\tfor ( var index = 1; index < arguments.length; index ++ ) {\n\n\t\t\t\tvar source = arguments[ index ];\n\n\t\t\t\tif ( source !== undefined && source !== null ) {\n\n\t\t\t\t\tfor ( var nextKey in source ) {\n\n\t\t\t\t\t\tif ( Object.prototype.hasOwnProperty.call( source, nextKey ) ) {\n\n\t\t\t\t\t\t\toutput[ nextKey ] = source[ nextKey ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn output;\n\n\t\t};\n\n\t} )();\n\n}\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nfunction EventDispatcher() {}\n\nObject.assign( EventDispatcher.prototype, {\n\n\taddEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tvar listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t},\n\n\thasEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tvar listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t},\n\n\tremoveEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tvar listeners = this._listeners;\n\t\tvar listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tvar index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tdispatchEvent: function ( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tvar listeners = this._listeners;\n\t\tvar listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\tvar array = listenerArray.slice( 0 );\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nvar REVISION = '94';\nvar MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2 };\nvar CullFaceNone = 0;\nvar CullFaceBack = 1;\nvar CullFaceFront = 2;\nvar CullFaceFrontBack = 3;\nvar FrontFaceDirectionCW = 0;\nvar FrontFaceDirectionCCW = 1;\nvar BasicShadowMap = 0;\nvar PCFShadowMap = 1;\nvar PCFSoftShadowMap = 2;\nvar FrontSide = 0;\nvar BackSide = 1;\nvar DoubleSide = 2;\nvar FlatShading = 1;\nvar SmoothShading = 2;\nvar NoColors = 0;\nvar FaceColors = 1;\nvar VertexColors = 2;\nvar NoBlending = 0;\nvar NormalBlending = 1;\nvar AdditiveBlending = 2;\nvar SubtractiveBlending = 3;\nvar MultiplyBlending = 4;\nvar CustomBlending = 5;\nvar AddEquation = 100;\nvar SubtractEquation = 101;\nvar ReverseSubtractEquation = 102;\nvar MinEquation = 103;\nvar MaxEquation = 104;\nvar ZeroFactor = 200;\nvar OneFactor = 201;\nvar SrcColorFactor = 202;\nvar OneMinusSrcColorFactor = 203;\nvar SrcAlphaFactor = 204;\nvar OneMinusSrcAlphaFactor = 205;\nvar DstAlphaFactor = 206;\nvar OneMinusDstAlphaFactor = 207;\nvar DstColorFactor = 208;\nvar OneMinusDstColorFactor = 209;\nvar SrcAlphaSaturateFactor = 210;\nvar NeverDepth = 0;\nvar AlwaysDepth = 1;\nvar LessDepth = 2;\nvar LessEqualDepth = 3;\nvar EqualDepth = 4;\nvar GreaterEqualDepth = 5;\nvar GreaterDepth = 6;\nvar NotEqualDepth = 7;\nvar MultiplyOperation = 0;\nvar MixOperation = 1;\nvar AddOperation = 2;\nvar NoToneMapping = 0;\nvar LinearToneMapping = 1;\nvar ReinhardToneMapping = 2;\nvar Uncharted2ToneMapping = 3;\nvar CineonToneMapping = 4;\nvar UVMapping = 300;\nvar CubeReflectionMapping = 301;\nvar CubeRefractionMapping = 302;\nvar EquirectangularReflectionMapping = 303;\nvar EquirectangularRefractionMapping = 304;\nvar SphericalReflectionMapping = 305;\nvar CubeUVReflectionMapping = 306;\nvar CubeUVRefractionMapping = 307;\nvar RepeatWrapping = 1000;\nvar ClampToEdgeWrapping = 1001;\nvar MirroredRepeatWrapping = 1002;\nvar NearestFilter = 1003;\nvar NearestMipMapNearestFilter = 1004;\nvar NearestMipMapLinearFilter = 1005;\nvar LinearFilter = 1006;\nvar LinearMipMapNearestFilter = 1007;\nvar LinearMipMapLinearFilter = 1008;\nvar UnsignedByteType = 1009;\nvar ByteType = 1010;\nvar ShortType = 1011;\nvar UnsignedShortType = 1012;\nvar IntType = 1013;\nvar UnsignedIntType = 1014;\nvar FloatType = 1015;\nvar HalfFloatType = 1016;\nvar UnsignedShort4444Type = 1017;\nvar UnsignedShort5551Type = 1018;\nvar UnsignedShort565Type = 1019;\nvar UnsignedInt248Type = 1020;\nvar AlphaFormat = 1021;\nvar RGBFormat = 1022;\nvar RGBAFormat = 1023;\nvar LuminanceFormat = 1024;\nvar LuminanceAlphaFormat = 1025;\nvar RGBEFormat = RGBAFormat;\nvar DepthFormat = 1026;\nvar DepthStencilFormat = 1027;\nvar RGB_S3TC_DXT1_Format = 33776;\nvar RGBA_S3TC_DXT1_Format = 33777;\nvar RGBA_S3TC_DXT3_Format = 33778;\nvar RGBA_S3TC_DXT5_Format = 33779;\nvar RGB_PVRTC_4BPPV1_Format = 35840;\nvar RGB_PVRTC_2BPPV1_Format = 35841;\nvar RGBA_PVRTC_4BPPV1_Format = 35842;\nvar RGBA_PVRTC_2BPPV1_Format = 35843;\nvar RGB_ETC1_Format = 36196;\nvar RGBA_ASTC_4x4_Format = 37808;\nvar RGBA_ASTC_5x4_Format = 37809;\nvar RGBA_ASTC_5x5_Format = 37810;\nvar RGBA_ASTC_6x5_Format = 37811;\nvar RGBA_ASTC_6x6_Format = 37812;\nvar RGBA_ASTC_8x5_Format = 37813;\nvar RGBA_ASTC_8x6_Format = 37814;\nvar RGBA_ASTC_8x8_Format = 37815;\nvar RGBA_ASTC_10x5_Format = 37816;\nvar RGBA_ASTC_10x6_Format = 37817;\nvar RGBA_ASTC_10x8_Format = 37818;\nvar RGBA_ASTC_10x10_Format = 37819;\nvar RGBA_ASTC_12x10_Format = 37820;\nvar RGBA_ASTC_12x12_Format = 37821;\nvar LoopOnce = 2200;\nvar LoopRepeat = 2201;\nvar LoopPingPong = 2202;\nvar InterpolateDiscrete = 2300;\nvar InterpolateLinear = 2301;\nvar InterpolateSmooth = 2302;\nvar ZeroCurvatureEnding = 2400;\nvar ZeroSlopeEnding = 2401;\nvar WrapAroundEnding = 2402;\nvar TrianglesDrawMode = 0;\nvar TriangleStripDrawMode = 1;\nvar TriangleFanDrawMode = 2;\nvar LinearEncoding = 3000;\nvar sRGBEncoding = 3001;\nvar GammaEncoding = 3007;\nvar RGBEEncoding = 3002;\nvar LogLuvEncoding = 3003;\nvar RGBM7Encoding = 3004;\nvar RGBM16Encoding = 3005;\nvar RGBDEncoding = 3006;\nvar BasicDepthPacking = 3200;\nvar RGBADepthPacking = 3201;\nvar TangentSpaceNormalMap = 0;\nvar ObjectSpaceNormalMap = 1;\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar _Math = {\n\n\tDEG2RAD: Math.PI / 180,\n\tRAD2DEG: 180 / Math.PI,\n\n\tgenerateUUID: ( function () {\n\n\t\t// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n\t\tvar lut = [];\n\n\t\tfor ( var i = 0; i < 256; i ++ ) {\n\n\t\t\tlut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 );\n\n\t\t}\n\n\t\treturn function generateUUID() {\n\n\t\t\tvar d0 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d1 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d2 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d3 = Math.random() * 0xffffffff | 0;\n\t\t\tvar uuid = lut[ d0 & 0xff ] + lut[ d0 >> 8 & 0xff ] + lut[ d0 >> 16 & 0xff ] + lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t\tlut[ d1 & 0xff ] + lut[ d1 >> 8 & 0xff ] + '-' + lut[ d1 >> 16 & 0x0f | 0x40 ] + lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t\tlut[ d2 & 0x3f | 0x80 ] + lut[ d2 >> 8 & 0xff ] + '-' + lut[ d2 >> 16 & 0xff ] + lut[ d2 >> 24 & 0xff ] +\n\t\t\t\tlut[ d3 & 0xff ] + lut[ d3 >> 8 & 0xff ] + lut[ d3 >> 16 & 0xff ] + lut[ d3 >> 24 & 0xff ];\n\n\t\t\t// .toUpperCase() here flattens concatenated strings to save heap memory space.\n\t\t\treturn uuid.toUpperCase();\n\n\t\t};\n\n\t} )(),\n\n\tclamp: function ( value, min, max ) {\n\n\t\treturn Math.max( min, Math.min( max, value ) );\n\n\t},\n\n\t// compute euclidian modulo of m % n\n\t// https://en.wikipedia.org/wiki/Modulo_operation\n\n\teuclideanModulo: function ( n, m ) {\n\n\t\treturn ( ( n % m ) + m ) % m;\n\n\t},\n\n\t// Linear mapping from range <a1, a2> to range <b1, b2>\n\n\tmapLinear: function ( x, a1, a2, b1, b2 ) {\n\n\t\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n\t},\n\n\t// https://en.wikipedia.org/wiki/Linear_interpolation\n\n\tlerp: function ( x, y, t ) {\n\n\t\treturn ( 1 - t ) * x + t * y;\n\n\t},\n\n\t// http://en.wikipedia.org/wiki/Smoothstep\n\n\tsmoothstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * ( 3 - 2 * x );\n\n\t},\n\n\tsmootherstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n\t},\n\n\t// Random integer from <low, high> interval\n\n\trandInt: function ( low, high ) {\n\n\t\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n\t},\n\n\t// Random float from <low, high> interval\n\n\trandFloat: function ( low, high ) {\n\n\t\treturn low + Math.random() * ( high - low );\n\n\t},\n\n\t// Random float from <-range/2, range/2> interval\n\n\trandFloatSpread: function ( range ) {\n\n\t\treturn range * ( 0.5 - Math.random() );\n\n\t},\n\n\tdegToRad: function ( degrees ) {\n\n\t\treturn degrees * _Math.DEG2RAD;\n\n\t},\n\n\tradToDeg: function ( radians ) {\n\n\t\treturn radians * _Math.RAD2DEG;\n\n\t},\n\n\tisPowerOfTwo: function ( value ) {\n\n\t\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n\t},\n\n\tceilPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n\t},\n\n\tfloorPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author philogb / http://blog.thejit.org/\n * @author egraether / http://egraether.com/\n * @author zz85 / http://www.lab4games.net/zz85/blog\n */\n\nfunction Vector2( x, y ) {\n\n\tthis.x = x || 0;\n\tthis.y = y || 0;\n\n}\n\nObject.defineProperties( Vector2.prototype, {\n\n\t\"width\": {\n\n\t\tget: function () {\n\n\t\t\treturn this.x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.x = value;\n\n\t\t}\n\n\t},\n\n\t\"height\": {\n\n\t\tget: function () {\n\n\t\t\treturn this.y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.y = value;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Vector2.prototype, {\n\n\tisVector2: true,\n\n\tset: function ( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponent: function ( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetComponent: function ( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t},\n\n\tcopy: function ( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t},\n\n\tadd: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t},\n\n\taddVectors: function ( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t},\n\n\taddScaledVector: function ( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tsubScalar: function ( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t},\n\n\tsubVectors: function ( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t},\n\n\tdivide: function ( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tdivideScalar: function ( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t},\n\n\tapplyMatrix3: function ( m ) {\n\n\t\tvar x = this.x, y = this.y;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t},\n\n\tmin: function ( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t},\n\n\tmax: function ( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t},\n\n\tclamp: function ( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampScalar: function () {\n\n\t\tvar min = new Vector2();\n\t\tvar max = new Vector2();\n\n\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\tmin.set( minVal, minVal );\n\t\t\tmax.set( maxVal, maxVal );\n\n\t\t\treturn this.clamp( min, max );\n\n\t\t};\n\n\t}(),\n\n\tclampLength: function ( min, max ) {\n\n\t\tvar length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t},\n\n\tfloor: function () {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tceil: function () {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tround: function () {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t},\n\n\troundToZero: function () {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t},\n\n\tlengthSq: function () {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t},\n\n\tmanhattanLength: function () {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t},\n\n\tnormalize: function () {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t},\n\n\tangle: function () {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tvar angle = Math.atan2( this.y, this.x );\n\n\t\tif ( angle < 0 ) angle += 2 * Math.PI;\n\n\t\treturn angle;\n\n\t},\n\n\tdistanceTo: function ( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t},\n\n\tdistanceToSquared: function ( v ) {\n\n\t\tvar dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t},\n\n\tmanhattanDistanceTo: function ( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t},\n\n\tsetLength: function ( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t},\n\n\tlerp: function ( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t},\n\n\tequals: function ( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t},\n\n\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t},\n\n\trotateAround: function ( center, angle ) {\n\n\t\tvar c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tvar x = this.x - center.x;\n\t\tvar y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author supereggbert / http://www.paulbrunt.co.uk/\n * @author philogb / http://blog.thejit.org/\n * @author jordi_ros / http://plattsoft.com\n * @author D1plo1d / http://github.com/D1plo1d\n * @author alteredq / http://alteredqualia.com/\n * @author mikael emtinger / http://gomo.se/\n * @author timknip / http://www.floorplanner.com/\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Matrix4() {\n\n\tthis.elements = [\n\n\t\t1, 0, 0, 0,\n\t\t0, 1, 0, 0,\n\t\t0, 0, 1, 0,\n\t\t0, 0, 0, 1\n\n\t];\n\n\tif ( arguments.length > 0 ) {\n\n\t\tconsole.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );\n\n\t}\n\n}\n\nObject.assign( Matrix4.prototype, {\n\n\tisMatrix4: true,\n\n\tset: function ( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t},\n\n\tidentity: function () {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t},\n\n\tcopy: function ( m ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t},\n\n\tcopyPosition: function ( m ) {\n\n\t\tvar te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t},\n\n\textractBasis: function ( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t},\n\n\tmakeBasis: function ( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\textractRotation: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function extractRotation( m ) {\n\n\t\t\t// this method does not support reflection matrices\n\n\t\t\tvar te = this.elements;\n\t\t\tvar me = m.elements;\n\n\t\t\tvar scaleX = 1 / v1.setFromMatrixColumn( m, 0 ).length();\n\t\t\tvar scaleY = 1 / v1.setFromMatrixColumn( m, 1 ).length();\n\t\t\tvar scaleZ = 1 / v1.setFromMatrixColumn( m, 2 ).length();\n\n\t\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\t\tte[ 3 ] = 0;\n\n\t\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\t\tte[ 7 ] = 0;\n\n\t\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\t\tte[ 11 ] = 0;\n\n\t\t\tte[ 12 ] = 0;\n\t\t\tte[ 13 ] = 0;\n\t\t\tte[ 14 ] = 0;\n\t\t\tte[ 15 ] = 1;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmakeRotationFromEuler: function ( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tvar te = this.elements;\n\n\t\tvar x = euler.x, y = euler.y, z = euler.z;\n\t\tvar a = Math.cos( x ), b = Math.sin( x );\n\t\tvar c = Math.cos( y ), d = Math.sin( y );\n\t\tvar e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationFromQuaternion: function () {\n\n\t\tvar zero = new Vector3( 0, 0, 0 );\n\t\tvar one = new Vector3( 1, 1, 1 );\n\n\t\treturn function makeRotationFromQuaternion( q ) {\n\n\t\t\treturn this.compose( zero, q, one );\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\tvar x = new Vector3();\n\t\tvar y = new Vector3();\n\t\tvar z = new Vector3();\n\n\t\treturn function lookAt( eye, target, up ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tz.subVectors( eye, target );\n\n\t\t\tif ( z.lengthSq() === 0 ) {\n\n\t\t\t\t// eye and target are in the same position\n\n\t\t\t\tz.z = 1;\n\n\t\t\t}\n\n\t\t\tz.normalize();\n\t\t\tx.crossVectors( up, z );\n\n\t\t\tif ( x.lengthSq() === 0 ) {\n\n\t\t\t\t// up and z are parallel\n\n\t\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t\tz.x += 0.0001;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz.z += 0.0001;\n\n\t\t\t\t}\n\n\t\t\t\tz.normalize();\n\t\t\t\tx.crossVectors( up, z );\n\n\t\t\t}\n\n\t\t\tx.normalize();\n\t\t\ty.crossVectors( z, x );\n\n\t\t\tte[ 0 ] = x.x; te[ 4 ] = y.x; te[ 8 ] = z.x;\n\t\t\tte[ 1 ] = x.y; te[ 5 ] = y.y; te[ 9 ] = z.y;\n\t\t\tte[ 2 ] = x.z; te[ 6 ] = y.z; te[ 10 ] = z.z;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmultiply: function ( m, n ) {\n\n\t\tif ( n !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' );\n\t\t\treturn this.multiplyMatrices( m, n );\n\n\t\t}\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t},\n\n\tpremultiply: function ( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t},\n\n\tmultiplyMatrices: function ( a, b ) {\n\n\t\tvar ae = a.elements;\n\t\tvar be = b.elements;\n\t\tvar te = this.elements;\n\n\t\tvar a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tvar a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tvar a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tvar a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tvar b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tvar b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tvar b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tvar b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( s ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t},\n\n\tapplyToBufferAttribute: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function applyToBufferAttribute( attribute ) {\n\n\t\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\tv1.x = attribute.getX( i );\n\t\t\t\tv1.y = attribute.getY( i );\n\t\t\t\tv1.z = attribute.getZ( i );\n\n\t\t\t\tv1.applyMatrix4( this );\n\n\t\t\t\tattribute.setXYZ( i, v1.x, v1.y, v1.z );\n\n\t\t\t}\n\n\t\t\treturn attribute;\n\n\t\t};\n\n\t}(),\n\n\tdeterminant: function () {\n\n\t\tvar te = this.elements;\n\n\t\tvar n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tvar n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tvar n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tvar n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t},\n\n\ttranspose: function () {\n\n\t\tvar te = this.elements;\n\t\tvar tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t},\n\n\tsetPosition: function ( v ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 12 ] = v.x;\n\t\tte[ 13 ] = v.y;\n\t\tte[ 14 ] = v.z;\n\n\t\treturn this;\n\n\t},\n\n\tgetInverse: function ( m, throwOnDegenerate ) {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tvar te = this.elements,\n\t\t\tme = m.elements,\n\n\t\t\tn11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], n41 = me[ 3 ],\n\t\t\tn12 = me[ 4 ], n22 = me[ 5 ], n32 = me[ 6 ], n42 = me[ 7 ],\n\t\t\tn13 = me[ 8 ], n23 = me[ 9 ], n33 = me[ 10 ], n43 = me[ 11 ],\n\t\t\tn14 = me[ 12 ], n24 = me[ 13 ], n34 = me[ 14 ], n44 = me[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tvar det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) {\n\n\t\t\tvar msg = \"THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0\";\n\n\t\t\tif ( throwOnDegenerate === true ) {\n\n\t\t\t\tthrow new Error( msg );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( msg );\n\n\t\t\t}\n\n\t\t\treturn this.identity();\n\n\t\t}\n\n\t\tvar detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( v ) {\n\n\t\tvar te = this.elements;\n\t\tvar x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t},\n\n\tgetMaxScaleOnAxis: function () {\n\n\t\tvar te = this.elements;\n\n\t\tvar scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tvar scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tvar scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t},\n\n\tmakeTranslation: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, x,\n\t\t\t0, 1, 0, y,\n\t\t\t0, 0, 1, z,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationX: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationY: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationZ: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationAxis: function ( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tvar c = Math.cos( angle );\n\t\tvar s = Math.sin( angle );\n\t\tvar t = 1 - c;\n\t\tvar x = axis.x, y = axis.y, z = axis.z;\n\t\tvar tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\t return this;\n\n\t},\n\n\tmakeScale: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeShear: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, y, z, 0,\n\t\t\tx, 1, z, 0,\n\t\t\tx, y, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tcompose: function ( position, quaternion, scale ) {\n\n\t\tvar te = this.elements;\n\n\t\tvar x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tvar x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tvar xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tvar yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tvar wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tvar sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t te[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t te[ 1 ] = ( xy + wz ) * sx;\n\t te[ 2 ] = ( xz - wy ) * sx;\n\t te[ 3 ] = 0;\n\n\t te[ 4 ] = ( xy - wz ) * sy;\n\t te[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t te[ 6 ] = ( yz + wx ) * sy;\n\t te[ 7 ] = 0;\n\n\t te[ 8 ] = ( xz + wy ) * sz;\n\t te[ 9 ] = ( yz - wx ) * sz;\n\t te[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t te[ 11 ] = 0;\n\n\t te[ 12 ] = position.x;\n\t te[ 13 ] = position.y;\n\t te[ 14 ] = position.z;\n\t te[ 15 ] = 1;\n\n\t return this;\n\n\t},\n\n\tdecompose: function () {\n\n\t\tvar vector = new Vector3();\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function decompose( position, quaternion, scale ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tvar sx = vector.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\t\tvar sy = vector.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\t\tvar sz = vector.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t\t// if determine is negative, we need to invert one scale\n\t\t\tvar det = this.determinant();\n\t\t\tif ( det < 0 ) sx = - sx;\n\n\t\t\tposition.x = te[ 12 ];\n\t\t\tposition.y = te[ 13 ];\n\t\t\tposition.z = te[ 14 ];\n\n\t\t\t// scale the rotation part\n\t\t\tmatrix.copy( this );\n\n\t\t\tvar invSX = 1 / sx;\n\t\t\tvar invSY = 1 / sy;\n\t\t\tvar invSZ = 1 / sz;\n\n\t\t\tmatrix.elements[ 0 ] *= invSX;\n\t\t\tmatrix.elements[ 1 ] *= invSX;\n\t\t\tmatrix.elements[ 2 ] *= invSX;\n\n\t\t\tmatrix.elements[ 4 ] *= invSY;\n\t\t\tmatrix.elements[ 5 ] *= invSY;\n\t\t\tmatrix.elements[ 6 ] *= invSY;\n\n\t\t\tmatrix.elements[ 8 ] *= invSZ;\n\t\t\tmatrix.elements[ 9 ] *= invSZ;\n\t\t\tmatrix.elements[ 10 ] *= invSZ;\n\n\t\t\tquaternion.setFromRotationMatrix( matrix );\n\n\t\t\tscale.x = sx;\n\t\t\tscale.y = sy;\n\t\t\tscale.z = sz;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmakePerspective: function ( left, right, top, bottom, near, far ) {\n\n\t\tif ( far === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' );\n\n\t\t}\n\n\t\tvar te = this.elements;\n\t\tvar x = 2 * near / ( right - left );\n\t\tvar y = 2 * near / ( top - bottom );\n\n\t\tvar a = ( right + left ) / ( right - left );\n\t\tvar b = ( top + bottom ) / ( top - bottom );\n\t\tvar c = - ( far + near ) / ( far - near );\n\t\tvar d = - 2 * far * near / ( far - near );\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t},\n\n\tmakeOrthographic: function ( left, right, top, bottom, near, far ) {\n\n\t\tvar te = this.elements;\n\t\tvar w = 1.0 / ( right - left );\n\t\tvar h = 1.0 / ( top - bottom );\n\t\tvar p = 1.0 / ( far - near );\n\n\t\tvar x = ( right + left ) * w;\n\t\tvar y = ( top + bottom ) * h;\n\t\tvar z = ( far + near ) * p;\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( matrix ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = matrix.elements;\n\n\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tvar te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author bhouston / http://clara.io\n */\n\nfunction Quaternion( x, y, z, w ) {\n\n\tthis._x = x || 0;\n\tthis._y = y || 0;\n\tthis._z = z || 0;\n\tthis._w = ( w !== undefined ) ? w : 1;\n\n}\n\nObject.assign( Quaternion, {\n\n\tslerp: function ( qa, qb, qm, t ) {\n\n\t\treturn qm.copy( qa ).slerp( qb, t );\n\n\t},\n\n\tslerpFlat: function ( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tvar x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ],\n\n\t\t\tx1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tvar s = 1 - t,\n\n\t\t\t\tcos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tvar sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tvar tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tvar f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n} );\n\nObject.defineProperties( Quaternion.prototype, {\n\n\tx: {\n\n\t\tget: function () {\n\n\t\t\treturn this._x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._x = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\ty: {\n\n\t\tget: function () {\n\n\t\t\treturn this._y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._y = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tz: {\n\n\t\tget: function () {\n\n\t\t\treturn this._z;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._z = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tw: {\n\n\t\tget: function () {\n\n\t\t\treturn this._w;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._w = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Quaternion.prototype, {\n\n\tset: function ( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t},\n\n\tcopy: function ( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromEuler: function ( euler, update ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tthrow new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tvar x = euler._x, y = euler._y, z = euler._z, order = euler.order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tvar cos = Math.cos;\n\t\tvar sin = Math.sin;\n\n\t\tvar c1 = cos( x / 2 );\n\t\tvar c2 = cos( y / 2 );\n\t\tvar c3 = cos( z / 2 );\n\n\t\tvar s1 = sin( x / 2 );\n\t\tvar s2 = sin( y / 2 );\n\t\tvar s3 = sin( z / 2 );\n\n\t\tif ( order === 'XYZ' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'YXZ' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t} else if ( order === 'ZXY' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'ZYX' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t} else if ( order === 'YZX' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'XZY' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t}\n\n\t\tif ( update !== false ) this.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromAxisAngle: function ( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tvar halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromRotationMatrix: function ( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tvar te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33,\n\t\t\ts;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\ts = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromUnitVectors: function () {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tvar v1 = new Vector3();\n\t\tvar r;\n\n\t\tvar EPS = 0.000001;\n\n\t\treturn function setFromUnitVectors( vFrom, vTo ) {\n\n\t\t\tif ( v1 === undefined ) v1 = new Vector3();\n\n\t\t\tr = vFrom.dot( vTo ) + 1;\n\n\t\t\tif ( r < EPS ) {\n\n\t\t\t\tr = 0;\n\n\t\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\t\tv1.set( - vFrom.y, vFrom.x, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tv1.set( 0, - vFrom.z, vFrom.y );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tv1.crossVectors( vFrom, vTo );\n\n\t\t\t}\n\n\t\t\tthis._x = v1.x;\n\t\t\tthis._y = v1.y;\n\t\t\tthis._z = v1.z;\n\t\t\tthis._w = r;\n\n\t\t\treturn this.normalize();\n\n\t\t};\n\n\t}(),\n\n\tinverse: function () {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t},\n\n\tconjugate: function () {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t},\n\n\tlengthSq: function () {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t},\n\n\tnormalize: function () {\n\n\t\tvar l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( q, p ) {\n\n\t\tif ( p !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' );\n\t\t\treturn this.multiplyQuaternions( q, p );\n\n\t\t}\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t},\n\n\tpremultiply: function ( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t},\n\n\tmultiplyQuaternions: function ( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tvar qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tvar qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tslerp: function ( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tvar x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tvar cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tvar s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\treturn this.normalize();\n\n\t\t}\n\n\t\tvar sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tvar halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tvar ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t},\n\n\tonChange: function ( callback ) {\n\n\t\tthis.onChangeCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tonChangeCallback: function () {}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author kile / http://kile.stravaganza.org/\n * @author philogb / http://blog.thejit.org/\n * @author mikael emtinger / http://gomo.se/\n * @author egraether / http://egraether.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Vector3( x, y, z ) {\n\n\tthis.x = x || 0;\n\tthis.y = y || 0;\n\tthis.z = z || 0;\n\n}\n\nObject.assign( Vector3.prototype, {\n\n\tisVector3: true,\n\n\tset: function ( x, y, z ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponent: function ( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetComponent: function ( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t},\n\n\tcopy: function ( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t},\n\n\tadd: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t},\n\n\taddVectors: function ( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t},\n\n\taddScaledVector: function ( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tsubScalar: function ( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t},\n\n\tsubVectors: function ( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' );\n\t\t\treturn this.multiplyVectors( v, w );\n\n\t\t}\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyVectors: function ( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t},\n\n\tapplyEuler: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function applyEuler( euler ) {\n\n\t\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t\t}\n\n\t\t\treturn this.applyQuaternion( quaternion.setFromEuler( euler ) );\n\n\t\t};\n\n\t}(),\n\n\tapplyAxisAngle: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function applyAxisAngle( axis, angle ) {\n\n\t\t\treturn this.applyQuaternion( quaternion.setFromAxisAngle( axis, angle ) );\n\n\t\t};\n\n\t}(),\n\n\tapplyMatrix3: function ( m ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tvar w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t},\n\n\tapplyQuaternion: function ( q ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// calculate quat * vector\n\n\t\tvar ix = qw * x + qy * z - qz * y;\n\t\tvar iy = qw * y + qz * x - qx * z;\n\t\tvar iz = qw * z + qx * y - qy * x;\n\t\tvar iw = - qx * x - qy * y - qz * z;\n\n\t\t// calculate result * inverse quat\n\n\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\treturn this;\n\n\t},\n\n\tproject: function () {\n\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function project( camera ) {\n\n\t\t\tmatrix.multiplyMatrices( camera.projectionMatrix, matrix.getInverse( camera.matrixWorld ) );\n\t\t\treturn this.applyMatrix4( matrix );\n\n\t\t};\n\n\t}(),\n\n\tunproject: function () {\n\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function unproject( camera ) {\n\n\t\t\tmatrix.multiplyMatrices( camera.matrixWorld, matrix.getInverse( camera.projectionMatrix ) );\n\t\t\treturn this.applyMatrix4( matrix );\n\n\t\t};\n\n\t}(),\n\n\ttransformDirection: function ( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t},\n\n\tdivide: function ( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tdivideScalar: function ( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t},\n\n\tmin: function ( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t},\n\n\tmax: function ( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t},\n\n\tclamp: function ( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampScalar: function () {\n\n\t\tvar min = new Vector3();\n\t\tvar max = new Vector3();\n\n\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\tmin.set( minVal, minVal, minVal );\n\t\t\tmax.set( maxVal, maxVal, maxVal );\n\n\t\t\treturn this.clamp( min, max );\n\n\t\t};\n\n\t}(),\n\n\tclampLength: function ( min, max ) {\n\n\t\tvar length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t},\n\n\tfloor: function () {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tceil: function () {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tround: function () {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t},\n\n\troundToZero: function () {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t},\n\n\t// TODO lengthSquared?\n\n\tlengthSq: function () {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t},\n\n\tmanhattanLength: function () {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t},\n\n\tnormalize: function () {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t},\n\n\tsetLength: function ( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t},\n\n\tlerp: function ( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t},\n\n\tcross: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' );\n\t\t\treturn this.crossVectors( v, w );\n\n\t\t}\n\n\t\treturn this.crossVectors( this, v );\n\n\t},\n\n\tcrossVectors: function ( a, b ) {\n\n\t\tvar ax = a.x, ay = a.y, az = a.z;\n\t\tvar bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t},\n\n\tprojectOnVector: function ( vector ) {\n\n\t\tvar scalar = vector.dot( this ) / vector.lengthSq();\n\n\t\treturn this.copy( vector ).multiplyScalar( scalar );\n\n\t},\n\n\tprojectOnPlane: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function projectOnPlane( planeNormal ) {\n\n\t\t\tv1.copy( this ).projectOnVector( planeNormal );\n\n\t\t\treturn this.sub( v1 );\n\n\t\t};\n\n\t}(),\n\n\treflect: function () {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function reflect( normal ) {\n\n\t\t\treturn this.sub( v1.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t\t};\n\n\t}(),\n\n\tangleTo: function ( v ) {\n\n\t\tvar theta = this.dot( v ) / ( Math.sqrt( this.lengthSq() * v.lengthSq() ) );\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( _Math.clamp( theta, - 1, 1 ) );\n\n\t},\n\n\tdistanceTo: function ( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t},\n\n\tdistanceToSquared: function ( v ) {\n\n\t\tvar dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t},\n\n\tmanhattanDistanceTo: function ( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t},\n\n\tsetFromSpherical: function ( s ) {\n\n\t\tvar sinPhiRadius = Math.sin( s.phi ) * s.radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( s.theta );\n\t\tthis.y = Math.cos( s.phi ) * s.radius;\n\t\tthis.z = sinPhiRadius * Math.cos( s.theta );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCylindrical: function ( c ) {\n\n\t\tthis.x = c.radius * Math.sin( c.theta );\n\t\tthis.y = c.y;\n\t\tthis.z = c.radius * Math.cos( c.theta );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixPosition: function ( m ) {\n\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixScale: function ( m ) {\n\n\t\tvar sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tvar sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tvar sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixColumn: function ( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t},\n\n\tequals: function ( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t},\n\n\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author bhouston / http://clara.io\n * @author tschw\n */\n\nfunction Matrix3() {\n\n\tthis.elements = [\n\n\t\t1, 0, 0,\n\t\t0, 1, 0,\n\t\t0, 0, 1\n\n\t];\n\n\tif ( arguments.length > 0 ) {\n\n\t\tconsole.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' );\n\n\t}\n\n}\n\nObject.assign( Matrix3.prototype, {\n\n\tisMatrix3: true,\n\n\tset: function ( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t},\n\n\tidentity: function () {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t},\n\n\tcopy: function ( m ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrix4: function ( m ) {\n\n\t\tvar me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tapplyToBufferAttribute: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function applyToBufferAttribute( attribute ) {\n\n\t\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\tv1.x = attribute.getX( i );\n\t\t\t\tv1.y = attribute.getY( i );\n\t\t\t\tv1.z = attribute.getZ( i );\n\n\t\t\t\tv1.applyMatrix3( this );\n\n\t\t\t\tattribute.setXYZ( i, v1.x, v1.y, v1.z );\n\n\t\t\t}\n\n\t\t\treturn attribute;\n\n\t\t};\n\n\t}(),\n\n\tmultiply: function ( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t},\n\n\tpremultiply: function ( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t},\n\n\tmultiplyMatrices: function ( a, b ) {\n\n\t\tvar ae = a.elements;\n\t\tvar be = b.elements;\n\t\tvar te = this.elements;\n\n\t\tvar a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tvar a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tvar a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tvar b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tvar b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tvar b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( s ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t},\n\n\tdeterminant: function () {\n\n\t\tvar te = this.elements;\n\n\t\tvar a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t},\n\n\tgetInverse: function ( matrix, throwOnDegenerate ) {\n\n\t\tif ( matrix && matrix.isMatrix4 ) {\n\n\t\t\tconsole.error( \"THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument.\" );\n\n\t\t}\n\n\t\tvar me = matrix.elements,\n\t\t\tte = this.elements,\n\n\t\t\tn11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ],\n\t\t\tn12 = me[ 3 ], n22 = me[ 4 ], n32 = me[ 5 ],\n\t\t\tn13 = me[ 6 ], n23 = me[ 7 ], n33 = me[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) {\n\n\t\t\tvar msg = \"THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0\";\n\n\t\t\tif ( throwOnDegenerate === true ) {\n\n\t\t\t\tthrow new Error( msg );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( msg );\n\n\t\t\t}\n\n\t\t\treturn this.identity();\n\n\t\t}\n\n\t\tvar detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t},\n\n\ttranspose: function () {\n\n\t\tvar tmp, m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t},\n\n\tgetNormalMatrix: function ( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).getInverse( this ).transpose();\n\n\t},\n\n\ttransposeIntoArray: function ( r ) {\n\n\t\tvar m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t},\n\n\tsetUvTransform: function ( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tvar c = Math.cos( rotation );\n\t\tvar s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t},\n\n\tscale: function ( sx, sy ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx;\n\t\tte[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy;\n\n\t\treturn this;\n\n\t},\n\n\trotate: function ( theta ) {\n\n\t\tvar c = Math.cos( theta );\n\t\tvar s = Math.sin( theta );\n\n\t\tvar te = this.elements;\n\n\t\tvar a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ];\n\t\tvar a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ];\n\n\t\tte[ 0 ] = c * a11 + s * a21;\n\t\tte[ 3 ] = c * a12 + s * a22;\n\t\tte[ 6 ] = c * a13 + s * a23;\n\n\t\tte[ 1 ] = - s * a11 + c * a21;\n\t\tte[ 4 ] = - s * a12 + c * a22;\n\t\tte[ 7 ] = - s * a13 + c * a23;\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( tx, ty ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ];\n\t\tte[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ];\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( matrix ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = matrix.elements;\n\n\t\tfor ( var i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tfor ( var i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tvar te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author szimek / https://github.com/szimek/\n */\n\nvar textureId = 0;\n\nfunction Texture( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\n\tthis.image = image !== undefined ? image : Texture.DEFAULT_IMAGE;\n\tthis.mipmaps = [];\n\n\tthis.mapping = mapping !== undefined ? mapping : Texture.DEFAULT_MAPPING;\n\n\tthis.wrapS = wrapS !== undefined ? wrapS : ClampToEdgeWrapping;\n\tthis.wrapT = wrapT !== undefined ? wrapT : ClampToEdgeWrapping;\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : LinearMipMapLinearFilter;\n\n\tthis.anisotropy = anisotropy !== undefined ? anisotropy : 1;\n\n\tthis.format = format !== undefined ? format : RGBAFormat;\n\tthis.type = type !== undefined ? type : UnsignedByteType;\n\n\tthis.offset = new Vector2( 0, 0 );\n\tthis.repeat = new Vector2( 1, 1 );\n\tthis.center = new Vector2( 0, 0 );\n\tthis.rotation = 0;\n\n\tthis.matrixAutoUpdate = true;\n\tthis.matrix = new Matrix3();\n\n\tthis.generateMipmaps = true;\n\tthis.premultiplyAlpha = false;\n\tthis.flipY = true;\n\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t//\n\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\tthis.encoding = encoding !== undefined ? encoding : LinearEncoding;\n\n\tthis.version = 0;\n\tthis.onUpdate = null;\n\n}\n\nTexture.DEFAULT_IMAGE = undefined;\nTexture.DEFAULT_MAPPING = UVMapping;\n\nTexture.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Texture,\n\n\tisTexture: true,\n\n\tupdateMatrix: function () {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.image = source.image;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.encoding = source.encoding;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tfunction getDataURL( image ) {\n\n\t\t\tvar canvas;\n\n\t\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\t\tcanvas = image;\n\n\t\t\t} else {\n\n\t\t\t\tcanvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\t\t\tcanvas.width = image.width;\n\t\t\t\tcanvas.height = image.height;\n\n\t\t\t\tvar context = canvas.getContext( '2d' );\n\n\t\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t\t} else {\n\n\t\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\tmapping: this.mapping,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY\n\n\t\t};\n\n\t\tif ( this.image !== undefined ) {\n\n\t\t\t// TODO: Move to THREE.Image\n\n\t\t\tvar image = this.image;\n\n\t\t\tif ( image.uuid === undefined ) {\n\n\t\t\t\timage.uuid = _Math.generateUUID(); // UGH\n\n\t\t\t}\n\n\t\t\tif ( ! isRootObject && meta.images[ image.uuid ] === undefined ) {\n\n\t\t\t\tvar url;\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\t// process array of images e.g. CubeTexture\n\n\t\t\t\t\turl = [];\n\n\t\t\t\t\tfor ( var i = 0, l = image.length; i < l; i ++ ) {\n\n\t\t\t\t\t\turl.push( getDataURL( image[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// process single image\n\n\t\t\t\t\turl = getDataURL( image );\n\n\t\t\t\t}\n\n\t\t\t\tmeta.images[ image.uuid ] = {\n\t\t\t\t\tuuid: image.uuid,\n\t\t\t\t\turl: url\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\toutput.image = image.uuid;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t},\n\n\ttransformUv: function ( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.defineProperty( Texture.prototype, \"needsUpdate\", {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\n/**\n * @author supereggbert / http://www.paulbrunt.co.uk/\n * @author philogb / http://blog.thejit.org/\n * @author mikael emtinger / http://gomo.se/\n * @author egraether / http://egraether.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Vector4( x, y, z, w ) {\n\n\tthis.x = x || 0;\n\tthis.y = y || 0;\n\tthis.z = z || 0;\n\tthis.w = ( w !== undefined ) ? w : 1;\n\n}\n\nObject.assign( Vector4.prototype, {\n\n\tisVector4: true,\n\n\tset: function ( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetW: function ( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponent: function ( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetComponent: function ( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t},\n\n\tcopy: function ( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t},\n\n\tadd: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t},\n\n\taddVectors: function ( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t},\n\n\taddScaledVector: function ( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t},\n\n\tsubScalar: function ( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t},\n\n\tsubVectors: function ( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t},\n\n\tdivideScalar: function ( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t},\n\n\tsetAxisAngleFromQuaternion: function ( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tvar s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetAxisAngleFromRotationMatrix: function ( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tvar angle, x, y, z,\t\t// variables for result\n\t\t\tepsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tvar xx = ( m11 + 1 ) / 2;\n\t\t\tvar yy = ( m22 + 1 ) / 2;\n\t\t\tvar zz = ( m33 + 1 ) / 2;\n\t\t\tvar xy = ( m12 + m21 ) / 4;\n\t\t\tvar xz = ( m13 + m31 ) / 4;\n\t\t\tvar yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tvar s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t ( m13 - m31 ) * ( m13 - m31 ) +\n\t\t ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t},\n\n\tmin: function ( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t},\n\n\tmax: function ( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t},\n\n\tclamp: function ( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampScalar: function () {\n\n\t\tvar min, max;\n\n\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\tif ( min === undefined ) {\n\n\t\t\t\tmin = new Vector4();\n\t\t\t\tmax = new Vector4();\n\n\t\t\t}\n\n\t\t\tmin.set( minVal, minVal, minVal, minVal );\n\t\t\tmax.set( maxVal, maxVal, maxVal, maxVal );\n\n\t\t\treturn this.clamp( min, max );\n\n\t\t};\n\n\t}(),\n\n\tclampLength: function ( min, max ) {\n\n\t\tvar length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t},\n\n\tfloor: function () {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t},\n\n\tceil: function () {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t},\n\n\tround: function () {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t},\n\n\troundToZero: function () {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\t\tthis.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t},\n\n\tlengthSq: function () {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t},\n\n\tmanhattanLength: function () {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t},\n\n\tnormalize: function () {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t},\n\n\tsetLength: function ( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t},\n\n\tlerp: function ( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t},\n\n\tequals: function ( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t},\n\n\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author szimek / https://github.com/szimek/\n * @author alteredq / http://alteredqualia.com/\n * @author Marius Kintel / https://github.com/kintel\n */\n\n/*\n In options, we can specify:\n * Texture parameters for an auto-generated target texture\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n*/\nfunction WebGLRenderTarget( width, height, options ) {\n\n\tthis.width = width;\n\tthis.height = height;\n\n\tthis.scissor = new Vector4( 0, 0, width, height );\n\tthis.scissorTest = false;\n\n\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\toptions = options || {};\n\n\tif ( options.minFilter === undefined ) options.minFilter = LinearFilter;\n\n\tthis.texture = new Texture( undefined, undefined, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : true;\n\n\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : true;\n\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\n}\n\nWebGLRenderTarget.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: WebGLRenderTarget,\n\n\tisWebGLRenderTarget: true,\n\n\tsetSize: function ( width, height ) {\n\n\t\tif ( this.width !== width || this.height !== height ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.texture = source.texture.clone();\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\t\tthis.depthTexture = source.depthTexture;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com\n */\n\nfunction WebGLRenderTargetCube( width, height, options ) {\n\n\tWebGLRenderTarget.call( this, width, height, options );\n\n\tthis.activeCubeFace = 0; // PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5\n\tthis.activeMipMapLevel = 0;\n\n}\n\nWebGLRenderTargetCube.prototype = Object.create( WebGLRenderTarget.prototype );\nWebGLRenderTargetCube.prototype.constructor = WebGLRenderTargetCube;\n\nWebGLRenderTargetCube.prototype.isWebGLRenderTargetCube = true;\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.image = { data: data, width: width, height: height };\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\tthis.generateMipmaps = false;\n\tthis.flipY = false;\n\tthis.unpackAlignment = 1;\n\n}\n\nDataTexture.prototype = Object.create( Texture.prototype );\nDataTexture.prototype.constructor = DataTexture;\n\nDataTexture.prototype.isDataTexture = true;\n\n/**\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Box3( min, max ) {\n\n\tthis.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity );\n\tthis.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity );\n\n}\n\nObject.assign( Box3.prototype, {\n\n\tisBox3: true,\n\n\tset: function ( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromArray: function ( array ) {\n\n\t\tvar minX = + Infinity;\n\t\tvar minY = + Infinity;\n\t\tvar minZ = + Infinity;\n\n\t\tvar maxX = - Infinity;\n\t\tvar maxY = - Infinity;\n\t\tvar maxZ = - Infinity;\n\n\t\tfor ( var i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\tvar x = array[ i ];\n\t\t\tvar y = array[ i + 1 ];\n\t\t\tvar z = array[ i + 2 ];\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromBufferAttribute: function ( attribute ) {\n\n\t\tvar minX = + Infinity;\n\t\tvar minY = + Infinity;\n\t\tvar minZ = + Infinity;\n\n\t\tvar maxX = - Infinity;\n\t\tvar maxY = - Infinity;\n\t\tvar maxZ = - Infinity;\n\n\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\tvar x = attribute.getX( i );\n\t\t\tvar y = attribute.getY( i );\n\t\t\tvar z = attribute.getZ( i );\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCenterAndSize: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function setFromCenterAndSize( center, size ) {\n\n\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\n\n\t\t\tthis.min.copy( center ).sub( halfSize );\n\t\t\tthis.max.copy( center ).add( halfSize );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tsetFromObject: function ( object ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tmakeEmpty: function () {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t},\n\n\tisEmpty: function () {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t},\n\n\tgetCenter: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t},\n\n\tgetSize: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getSize() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t},\n\n\texpandByPoint: function ( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t},\n\n\texpandByVector: function ( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t},\n\n\texpandByScalar: function ( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t},\n\n\texpandByObject: function () {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tvar scope, i, l;\n\n\t\tvar v1 = new Vector3();\n\n\t\tfunction traverse( node ) {\n\n\t\t\tvar geometry = node.geometry;\n\n\t\t\tif ( geometry !== undefined ) {\n\n\t\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\t\tvar vertices = geometry.vertices;\n\n\t\t\t\t\tfor ( i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tv1.copy( vertices[ i ] );\n\t\t\t\t\t\tv1.applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\tscope.expandByPoint( v1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( geometry.isBufferGeometry ) {\n\n\t\t\t\t\tvar attribute = geometry.attributes.position;\n\n\t\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\t\tfor ( i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tv1.fromBufferAttribute( attribute, i ).applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\t\tscope.expandByPoint( v1 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn function expandByObject( object ) {\n\n\t\t\tscope = this;\n\n\t\t\tobject.updateMatrixWorld( true );\n\n\t\t\tobject.traverse( traverse );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t},\n\n\tcontainsBox: function ( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t},\n\n\tgetParameter: function ( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getParameter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t},\n\n\tintersectsSphere: ( function () {\n\n\t\tvar closestPoint = new Vector3();\n\n\t\treturn function intersectsSphere( sphere ) {\n\n\t\t\t// Find the point on the AABB closest to the sphere center.\n\t\t\tthis.clampPoint( sphere.center, closestPoint );\n\n\t\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\t\treturn closestPoint.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t\t};\n\n\t} )(),\n\n\tintersectsPlane: function ( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tvar min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= plane.constant && max >= plane.constant );\n\n\t},\n\n\tintersectsTriangle: ( function () {\n\n\t\t// triangle centered vertices\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\t// triangle edge vectors\n\t\tvar f0 = new Vector3();\n\t\tvar f1 = new Vector3();\n\t\tvar f2 = new Vector3();\n\n\t\tvar testAxis = new Vector3();\n\n\t\tvar center = new Vector3();\n\t\tvar extents = new Vector3();\n\n\t\tvar triangleNormal = new Vector3();\n\n\t\tfunction satForAxes( axes ) {\n\n\t\t\tvar i, j;\n\n\t\t\tfor ( i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t\t\ttestAxis.fromArray( axes, i );\n\t\t\t\t// project the aabb onto the seperating axis\n\t\t\t\tvar r = extents.x * Math.abs( testAxis.x ) + extents.y * Math.abs( testAxis.y ) + extents.z * Math.abs( testAxis.z );\n\t\t\t\t// project all 3 vertices of the triangle onto the seperating axis\n\t\t\t\tvar p0 = v0.dot( testAxis );\n\t\t\t\tvar p1 = v1.dot( testAxis );\n\t\t\t\tvar p2 = v2.dot( testAxis );\n\t\t\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\t\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t\t\t// the axis is seperating and we can exit\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn function intersectsTriangle( triangle ) {\n\n\t\t\tif ( this.isEmpty() ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// compute box center and extents\n\t\t\tthis.getCenter( center );\n\t\t\textents.subVectors( this.max, center );\n\n\t\t\t// translate triangle to aabb origin\n\t\t\tv0.subVectors( triangle.a, center );\n\t\t\tv1.subVectors( triangle.b, center );\n\t\t\tv2.subVectors( triangle.c, center );\n\n\t\t\t// compute edge vectors for triangle\n\t\t\tf0.subVectors( v1, v0 );\n\t\t\tf1.subVectors( v2, v1 );\n\t\t\tf2.subVectors( v0, v2 );\n\n\t\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\t\tvar axes = [\n\t\t\t\t0, - f0.z, f0.y, 0, - f1.z, f1.y, 0, - f2.z, f2.y,\n\t\t\t\tf0.z, 0, - f0.x, f1.z, 0, - f1.x, f2.z, 0, - f2.x,\n\t\t\t\t- f0.y, f0.x, 0, - f1.y, f1.x, 0, - f2.y, f2.x, 0\n\t\t\t];\n\t\t\tif ( ! satForAxes( axes ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// test 3 face normals from the aabb\n\t\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\t\tif ( ! satForAxes( axes ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// finally testing the face normal of the triangle\n\t\t\t// use already existing triangle edge vectors here\n\t\t\ttriangleNormal.crossVectors( f0, f1 );\n\t\t\taxes = [ triangleNormal.x, triangleNormal.y, triangleNormal.z ];\n\t\t\treturn satForAxes( axes );\n\n\t\t};\n\n\t} )(),\n\n\tclampPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t},\n\n\tdistanceToPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function distanceToPoint( point ) {\n\n\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\n\t\t\treturn clampedPoint.sub( point ).length();\n\n\t\t};\n\n\t}(),\n\n\tgetBoundingSphere: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function getBoundingSphere( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box3: .getBoundingSphere() target is now required' );\n\t\t\t\ttarget = new Sphere();\n\n\t\t\t}\n\n\t\t\tthis.getCenter( target.center );\n\n\t\t\ttarget.radius = this.getSize( v1 ).length() * 0.5;\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tintersect: function ( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\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.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t},\n\n\tunion: function ( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty( ) ) return this;\n\n\t\tvar m = matrix.elements;\n\n\t\tvar xax = m[ 0 ] * this.min.x, xay = m[ 1 ] * this.min.x, xaz = m[ 2 ] * this.min.x;\n\t\tvar xbx = m[ 0 ] * this.max.x, xby = m[ 1 ] * this.max.x, xbz = m[ 2 ] * this.max.x;\n\t\tvar yax = m[ 4 ] * this.min.y, yay = m[ 5 ] * this.min.y, yaz = m[ 6 ] * this.min.y;\n\t\tvar ybx = m[ 4 ] * this.max.y, yby = m[ 5 ] * this.max.y, ybz = m[ 6 ] * this.max.y;\n\t\tvar zax = m[ 8 ] * this.min.z, zay = m[ 9 ] * this.min.z, zaz = m[ 10 ] * this.min.z;\n\t\tvar zbx = m[ 8 ] * this.max.z, zby = m[ 9 ] * this.max.z, zbz = m[ 10 ] * this.max.z;\n\n\t\tthis.min.x = Math.min( xax, xbx ) + Math.min( yax, ybx ) + Math.min( zax, zbx ) + m[ 12 ];\n\t\tthis.min.y = Math.min( xay, xby ) + Math.min( yay, yby ) + Math.min( zay, zby ) + m[ 13 ];\n\t\tthis.min.z = Math.min( xaz, xbz ) + Math.min( yaz, ybz ) + Math.min( zaz, zbz ) + m[ 14 ];\n\t\tthis.max.x = Math.max( xax, xbx ) + Math.max( yax, ybx ) + Math.max( zax, zbx ) + m[ 12 ];\n\t\tthis.max.y = Math.max( xay, xby ) + Math.max( yay, yby ) + Math.max( zay, zby ) + m[ 13 ];\n\t\tthis.max.z = Math.max( xaz, xbz ) + Math.max( yaz, ybz ) + Math.max( zaz, zbz ) + m[ 14 ];\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Sphere( center, radius ) {\n\n\tthis.center = ( center !== undefined ) ? center : new Vector3();\n\tthis.radius = ( radius !== undefined ) ? radius : 0;\n\n}\n\nObject.assign( Sphere.prototype, {\n\n\tset: function ( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function () {\n\n\t\tvar box = new Box3();\n\n\t\treturn function setFromPoints( points, optionalCenter ) {\n\n\t\t\tvar center = this.center;\n\n\t\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\t\tcenter.copy( optionalCenter );\n\n\t\t\t} else {\n\n\t\t\t\tbox.setFromPoints( points ).getCenter( center );\n\n\t\t\t}\n\n\t\t\tvar maxRadiusSq = 0;\n\n\t\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t\t}\n\n\t\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t},\n\n\tempty: function () {\n\n\t\treturn ( this.radius <= 0 );\n\n\t},\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t},\n\n\tdistanceToPoint: function ( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t},\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\tvar radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t},\n\n\tintersectsPlane: function ( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t},\n\n\tclampPoint: function ( point, target ) {\n\n\t\tvar deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t},\n\n\tgetBoundingBox: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .getBoundingBox() target is now required' );\n\t\t\ttarget = new Box3();\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t},\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Plane( normal, constant ) {\n\n\t// normal is assumed to be normalized\n\n\tthis.normal = ( normal !== undefined ) ? normal : new Vector3( 1, 0, 0 );\n\tthis.constant = ( constant !== undefined ) ? constant : 0;\n\n}\n\nObject.assign( Plane.prototype, {\n\n\tset: function ( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponents: function ( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromNormalAndCoplanarPoint: function ( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCoplanarPoints: function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\treturn function setFromCoplanarPoints( a, b, c ) {\n\n\t\t\tvar normal = v1.subVectors( c, b ).cross( v2.subVectors( a, b ) ).normalize();\n\n\t\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t},\n\n\tnormalize: function () {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tvar inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t},\n\n\tdistanceToPoint: function ( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t},\n\n\tdistanceToSphere: function ( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t},\n\n\tprojectPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .projectPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point );\n\n\t},\n\n\tintersectLine: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function intersectLine( line, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Plane: .intersectLine() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tvar direction = line.delta( v1 );\n\n\t\t\tvar denominator = this.normal.dot( direction );\n\n\t\t\tif ( denominator === 0 ) {\n\n\t\t\t\t// line is coplanar, return origin\n\t\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\t\treturn target.copy( line.start );\n\n\t\t\t\t}\n\n\t\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t\tvar t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t\treturn target.copy( direction ).multiplyScalar( t ).add( line.start );\n\n\t\t};\n\n\t}(),\n\n\tintersectsLine: function ( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tvar startSign = this.distanceToPoint( line.start );\n\t\tvar endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t},\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t},\n\n\tcoplanarPoint: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .coplanarPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t},\n\n\tapplyMatrix4: function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar m1 = new Matrix3();\n\n\t\treturn function applyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\t\tvar normalMatrix = optionalNormalMatrix || m1.getNormalMatrix( matrix );\n\n\t\t\tvar referencePoint = this.coplanarPoint( v1 ).applyMatrix4( matrix );\n\n\t\t\tvar normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author bhouston / http://clara.io\n */\n\nfunction Frustum( p0, p1, p2, p3, p4, p5 ) {\n\n\tthis.planes = [\n\n\t\t( p0 !== undefined ) ? p0 : new Plane(),\n\t\t( p1 !== undefined ) ? p1 : new Plane(),\n\t\t( p2 !== undefined ) ? p2 : new Plane(),\n\t\t( p3 !== undefined ) ? p3 : new Plane(),\n\t\t( p4 !== undefined ) ? p4 : new Plane(),\n\t\t( p5 !== undefined ) ? p5 : new Plane()\n\n\t];\n\n}\n\nObject.assign( Frustum.prototype, {\n\n\tset: function ( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tvar planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( frustum ) {\n\n\t\tvar planes = this.planes;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrix: function ( m ) {\n\n\t\tvar planes = this.planes;\n\t\tvar me = m.elements;\n\t\tvar me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tvar me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tvar me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tvar me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\treturn this;\n\n\t},\n\n\tintersectsObject: function () {\n\n\t\tvar sphere = new Sphere();\n\n\t\treturn function intersectsObject( object ) {\n\n\t\t\tvar geometry = object.geometry;\n\n\t\t\tif ( geometry.boundingSphere === null )\n\t\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere )\n\t\t\t\t.applyMatrix4( object.matrixWorld );\n\n\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t};\n\n\t}(),\n\n\tintersectsSprite: function () {\n\n\t\tvar sphere = new Sphere();\n\n\t\treturn function intersectsSprite( sprite ) {\n\n\t\t\tsphere.center.set( 0, 0, 0 );\n\t\t\tsphere.radius = 0.7071067811865476;\n\t\t\tsphere.applyMatrix4( sprite.matrixWorld );\n\n\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t};\n\n\t}(),\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\tvar planes = this.planes;\n\t\tvar center = sphere.center;\n\t\tvar negRadius = - sphere.radius;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\tvar distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\tintersectsBox: function () {\n\n\t\tvar p1 = new Vector3(),\n\t\t\tp2 = new Vector3();\n\n\t\treturn function intersectsBox( box ) {\n\n\t\t\tvar planes = this.planes;\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\tvar plane = planes[ i ];\n\n\t\t\t\tp1.x = plane.normal.x > 0 ? box.min.x : box.max.x;\n\t\t\t\tp2.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t\tp1.y = plane.normal.y > 0 ? box.min.y : box.max.y;\n\t\t\t\tp2.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t\tp1.z = plane.normal.z > 0 ? box.min.z : box.max.z;\n\t\t\t\tp2.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\t\tvar d1 = plane.distanceToPoint( p1 );\n\t\t\t\tvar d2 = plane.distanceToPoint( p2 );\n\n\t\t\t\t// if both outside plane, no intersection\n\n\t\t\t\tif ( d1 < 0 && d2 < 0 ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t};\n\n\t}(),\n\n\tcontainsPoint: function ( point ) {\n\n\t\tvar planes = this.planes;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n} );\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\\n\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\\n\";\n\nvar alphatest_fragment = \"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a < ALPHATEST ) discard;\\n#endif\\n\";\n\nvar 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\";\n\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar begin_vertex = \"\\nvec3 transformed = vec3( position );\\n\";\n\nvar beginnormal_vertex = \"\\nvec3 objectNormal = vec3( normal );\\n\";\n\nvar bsdfs = \"float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\\tif( decayExponent > 0.0 ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\t\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\t\\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t\\treturn distanceFalloff * maxDistanceCutoffFactor;\\n#else\\n\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n#endif\\n\\t}\\n\\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}\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\tfloat l = length( f );\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n}\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\tfloat x = dot( v1, v2 );\\n\\tfloat y = abs( x );\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n}\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\treturn vec3( result );\\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\";\n\nvar 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 = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\n\\t\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\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\\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\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\";\n\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\\n\";\n\nvar 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\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n\";\n\nvar color_fragment = \"#ifdef USE_COLOR\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\\n\";\n\nvar color_pars_vertex = \"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_vertex = \"#ifdef USE_COLOR\\n\\tvColor.xyz = color.xyz;\\n#endif\";\n\nvar common = \"#define PI 3.14159265359\\n#define PI2 6.28318530718\\n#define PI_HALF 1.5707963267949\\n#define RECIPROCAL_PI 0.31830988618\\n#define RECIPROCAL_PI2 0.15915494\\n#define LOG2 1.442695\\n#define EPSILON 1e-6\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\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}\\nmat3 transposeMat3( const in mat3 m ) {\\n\\tmat3 tmp;\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\treturn tmp;\\n}\\nfloat linearToRelativeLuminance( const in vec3 color ) {\\n\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\n\\treturn dot( weights, color.rgb );\\n}\\n\";\n\nvar 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\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = normalMatrix * objectNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\\n\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\\n#endif\\n\";\n\nvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\\n\";\n\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\\n\";\n\nvar encodings_fragment = \" gl_FragColor = linearToOutputTexel( gl_FragColor );\\n\";\n\nvar encodings_pars_fragment = \"\\nvec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\\n}\\nvec4 sRGBToLinear( in vec4 value ) {\\n\\treturn 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\\treturn 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\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\nvec4 LinearToRGBE( in vec4 value ) {\\n\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\n\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n}\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.xyz * value.w * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\\n\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n\\tM = ceil( M * 255.0 ) / 255.0;\\n\\treturn vec4( value.rgb / ( M * maxRange ), M );\\n}\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\\n\\tfloat D = max( maxRange / maxRGB, 1.0 );\\n\\tD = min( floor( D ) / 255.0, 1.0 );\\n\\treturn 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\\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\\n\\tXp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\\n\\tvec4 vResult;\\n\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n\\tvResult.w = fract(Le);\\n\\tvResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\\n\\treturn 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\\tfloat Le = value.z * 255.0 + value.w;\\n\\tvec3 Xp_Y_XYZp;\\n\\tXp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\\n\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n\\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\\n\\treturn vec4( max(vRGB, 0.0), 1.0 );\\n}\\n\";\n\nvar 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 ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_EQUIREC )\\n\\t\\tvec2 sampleUV;\\n\\t\\treflectVec = normalize( reflectVec );\\n\\t\\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\t\\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\\n\\t\\tvec4 envColor = texture2D( envMap, sampleUV );\\n\\t#elif defined( ENVMAP_TYPE_SPHERE )\\n\\t\\treflectVec = normalize( reflectVec );\\n\\t\\tvec3 reflectView = 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#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\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\";\n\nvar envmap_pars_fragment = \"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\\n\\tuniform float reflectivity;\\n\\tuniform float envMapIntensity;\\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\\tuniform int maxMipLevel;\\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\";\n\nvar 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\";\n\nvar 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\";\n\nvar fog_vertex = \"\\n#ifdef USE_FOG\\nfogDepth = -mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n varying float fogDepth;\\n#endif\\n\";\n\nvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\\n\";\n\nvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float fogDepth;\\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\\n\";\n\nvar gradientmap_pars_fragment = \"#ifdef TOON\\n\\tuniform sampler2D gradientMap;\\n\\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\t\\tfloat dotNL = dot( normal, lightDirection );\\n\\t\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t\\t#ifdef USE_GRADIENTMAP\\n\\t\\t\\treturn texture2D( gradientMap, coord ).rgb;\\n\\t\\t#else\\n\\t\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\";\n\nvar lightmap_fragment = \"#ifdef USE_LIGHTMAP\\n\\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n#endif\\n\";\n\nvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\nvar 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\\t#pragma unroll_loop\\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\\t#pragma unroll_loop\\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\\t#pragma unroll_loop\\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\\t#pragma unroll_loop\\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\";\n\nvar lights_pars_begin = \"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\\tfloat shadowCameraNear;\\n\\t\\tfloat shadowCameraFar;\\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\\tdirectLight.color = pointLight.color;\\n\\t\\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\\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 ( angleCos > spotLight.coneCos ) {\\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_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltc_1;\\tuniform sampler2D ltc_2;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\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\";\n\nvar lights_pars_maps = \"#if defined( USE_ENVMAP ) && defined( PHYSICAL )\\n\\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\\n\\t\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryVec = 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 = 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\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryReflectVec = 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 = 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 = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\t\\t\\tsampleUV.x = atan( reflectVec.z, 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 = 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\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\\n\";\n\nvar 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\\t#ifdef TOON\\n\\t\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\t#else\\n\\t\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\t\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#endif\\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\";\n\nvar 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( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\\n\\tmaterial.clearCoat = saturate( clearCoat );\\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\\n#endif\\n\";\n\nvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3\\tdiffuseColor;\\n\\tfloat\\tspecularRoughness;\\n\\tvec3\\tspecularColor;\\n\\t#ifndef STANDARD\\n\\t\\tfloat clearCoat;\\n\\t\\tfloat clearCoatRoughness;\\n\\t#endif\\n};\\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\\n\\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.specularRoughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos - halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos + halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos + halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos - halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3( 0, 1, 0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\t\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\t}\\n#endif\\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\\t#ifndef STANDARD\\n\\t\\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\\n\\t#else\\n\\t\\tfloat clearCoatDHR = 0.0;\\n\\t#endif\\n\\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\\n\\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\t#ifndef STANDARD\\n\\t\\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\\n\\t#endif\\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 vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t#ifndef STANDARD\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\tfloat dotNL = dotNV;\\n\\t\\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\\n\\t#else\\n\\t\\tfloat clearCoatDHR = 0.0;\\n\\t#endif\\n\\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\\n\\t#ifndef STANDARD\\n\\t\\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\\n\\t#endif\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_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 )\\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\\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\";\n\nvar lights_fragment_begin = \"\\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\\t#pragma unroll_loop\\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 ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 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\\t#pragma unroll_loop\\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\\t#pragma unroll_loop\\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 ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop\\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#endif\\n#if defined( RE_IndirectSpecular )\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearCoatRadiance = vec3( 0.0 );\\n#endif\\n\";\n\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\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 defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tirradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tradiance += getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), maxMipLevel );\\n\\t#ifndef STANDARD\\n\\t\\tclearCoatRadiance += getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), maxMipLevel );\\n\\t#endif\\n#endif\\n\";\n\nvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\\n#endif\\n\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar 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\";\n\nvar 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\";\n\nvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t#else\\n\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\tgl_Position.z *= gl_Position.w;\\n\\t#endif\\n#endif\\n\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\\n\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n\";\n\nvar map_particle_fragment = \"#ifdef USE_MAP\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n\";\n\nvar map_particle_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform mat3 uvTransform;\\n\\tuniform sampler2D map;\\n#endif\\n\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\\n\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar 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\";\n\nvar 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\";\n\nvar 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\";\n\nvar normal_fragment_begin = \"#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 * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t#endif\\n#endif\\n\";\n\nvar normal_fragment_maps = \"#ifdef USE_NORMALMAP\\n\\t#ifdef OBJECTSPACE_NORMALMAP\\n\\t\\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\t\\t#ifdef FLIP_SIDED\\n\\t\\t\\tnormal = - normal;\\n\\t\\t#endif\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\t#endif\\n\\t\\tnormal = normalize( normalMatrix * normal );\\n\\t#else\\n\\t\\tnormal = perturbNormal2Arb( -vViewPosition, normal );\\n\\t#endif\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\\n#endif\\n\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n\\t#ifdef OBJECTSPACE_NORMALMAP\\n\\t\\tuniform mat3 normalMatrix;\\n\\t#else\\n\\t\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\\n\\t\\t\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\n\\t\\t\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\n\\t\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\t\\tvec2 st1 = dFdy( vUv.st );\\n\\t\\t\\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\\n\\t\\t\\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\\n\\t\\t\\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\\n\\t\\t\\tvec3 N = normalize( surf_norm );\\n\\t\\t\\tmat3 tsn = mat3( S, T, N );\\n\\t\\t\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\t\\t\\tmapN.xy *= normalScale;\\n\\t\\t\\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\t\\treturn normalize( tsn * mapN );\\n\\t\\t}\\n\\t#endif\\n#endif\\n\";\n\nvar packing = \"vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\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 viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\\n\";\n\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\\n\";\n\nvar project_vertex = \"vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\\ngl_Position = projectionMatrix * mvPosition;\\n\";\n\nvar dithering_fragment = \"#if defined( DITHERING )\\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\\n\";\n\nvar dithering_pars_fragment = \"#if defined( DITHERING )\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif\\n\";\n\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\\n\";\n\nvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\nvar 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\\tfloat shadow = 1.0;\\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\\tshadow = (\\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\\tshadow = (\\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\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn shadow;\\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, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\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\";\n\nvar 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\";\n\nvar shadowmap_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop\\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\\t#pragma unroll_loop\\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\\t#pragma unroll_loop\\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\";\n\nvar 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\\t#pragma unroll_loop\\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\\t#pragma unroll_loop\\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\\t#pragma unroll_loop\\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 ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\\n\";\n\nvar 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\";\n\nvar 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 boneTextureSize;\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\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\";\n\nvar 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\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif\\n\";\n\nvar 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\";\n\nvar 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\";\n\nvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\nvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\\n\";\n\nvar tonemapping_pars_fragment = \"#ifndef saturate\\n\\t#define saturate(a) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nuniform float toneMappingWhitePoint;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn toneMappingExposure * color;\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn 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\\tcolor *= toneMappingExposure;\\n\\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\n\";\n\nvar 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\";\n\nvar 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 mat3 uvTransform;\\n#endif\\n\";\n\nvar 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 = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\";\n\nvar uv2_pars_fragment = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\";\n\nvar uv2_pars_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n#endif\";\n\nvar uv2_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = uv2;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\\n\\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\\n#endif\\n\";\n\nvar cube_frag = \"uniform samplerCube tCube;\\nuniform float tFlip;\\nuniform float opacity;\\nvarying vec3 vWorldPosition;\\nvoid main() {\\n\\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\\n\\tgl_FragColor.a *= opacity;\\n}\\n\";\n\nvar cube_vert = \"varying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\tgl_Position.z = gl_Position.w;\\n}\\n\";\n\nvar depth_frag = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - gl_FragCoord.z ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\\n\\t#endif\\n}\\n\";\n\nvar depth_vert = \"#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n}\\n\";\n\nvar distanceRGBA_frag = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main () {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\\n\";\n\nvar distanceRGBA_vert = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvWorldPosition = worldPosition.xyz;\\n}\\n\";\n\nvar equirect_frag = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tvec3 direction = normalize( vWorldPosition );\\n\\tvec2 sampleUV;\\n\\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n}\\n\";\n\nvar equirect_vert = \"varying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n}\\n\";\n\nvar linedashed_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\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 <logdepthbuf_fragment>\\n\\t#include <color_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\";\n\nvar linedashed_vert = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <color_vertex>\\n\\tvLineDistance = scale * lineDistance;\\n\\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar meshbasic_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include <aomap_fragment>\\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\";\n\nvar meshbasic_vert = \"#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_ENVMAP\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar 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 <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <fog_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\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 <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <emissivemap_fragment>\\n\\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\\n\\t#include <lightmap_fragment>\\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 <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\\n\";\n\nvar meshlambert_vert = \"#define LAMBERT\\nvarying vec3 vLightFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <lights_lambert_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar meshphong_frag = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <gradientmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <lights_phong_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\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 <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_phong_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\\n\";\n\nvar meshphong_vert = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar meshphysical_frag = \"#define PHYSICAL\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifndef STANDARD\\n\\tuniform float clearCoat;\\n\\tuniform float clearCoatRoughness;\\n#endif\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <cube_uv_reflection_fragment>\\n#include <lights_pars_begin>\\n#include <lights_pars_maps>\\n#include <lights_physical_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <roughnessmap_pars_fragment>\\n#include <metalnessmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\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 <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <roughnessmap_fragment>\\n\\t#include <metalnessmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_physical_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\\n\";\n\nvar meshphysical_vert = \"#define PHYSICAL\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar normal_frag = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\nvoid main() {\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\\n\";\n\nvar normal_vert = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\\n\";\n\nvar points_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <color_pars_fragment>\\n#include <map_particle_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_particle_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphatest_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\";\n\nvar points_vert = \"uniform float size;\\nuniform float scale;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <color_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <project_vertex>\\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 <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar shadow_frag = \"uniform vec3 color;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include <fog_fragment>\\n}\\n\";\n\nvar shadow_vert = \"#include <fog_pars_vertex>\\n#include <shadowmap_pars_vertex>\\nvoid main() {\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar ShaderChunk = {\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tencodings_fragment: encodings_fragment,\n\tencodings_pars_fragment: encodings_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_fragment: lightmap_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_vertex: lights_lambert_vertex,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_pars_maps: lights_pars_maps,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tuv2_pars_fragment: uv2_pars_fragment,\n\tuv2_pars_vertex: uv2_pars_vertex,\n\tuv2_vertex: uv2_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tcube_frag: cube_frag,\n\tcube_vert: cube_vert,\n\tdepth_frag: depth_frag,\n\tdepth_vert: depth_vert,\n\tdistanceRGBA_frag: distanceRGBA_frag,\n\tdistanceRGBA_vert: distanceRGBA_vert,\n\tequirect_frag: equirect_frag,\n\tequirect_vert: equirect_vert,\n\tlinedashed_frag: linedashed_frag,\n\tlinedashed_vert: linedashed_vert,\n\tmeshbasic_frag: meshbasic_frag,\n\tmeshbasic_vert: meshbasic_vert,\n\tmeshlambert_frag: meshlambert_frag,\n\tmeshlambert_vert: meshlambert_vert,\n\tmeshphong_frag: meshphong_frag,\n\tmeshphong_vert: meshphong_vert,\n\tmeshphysical_frag: meshphysical_frag,\n\tmeshphysical_vert: meshphysical_vert,\n\tnormal_frag: normal_frag,\n\tnormal_vert: normal_vert,\n\tpoints_frag: points_frag,\n\tpoints_vert: points_vert,\n\tshadow_frag: shadow_frag,\n\tshadow_vert: shadow_vert\n};\n\n/**\n * Uniform Utilities\n */\n\nvar UniformsUtils = {\n\n\tmerge: function ( uniforms ) {\n\n\t\tvar merged = {};\n\n\t\tfor ( var u = 0; u < uniforms.length; u ++ ) {\n\n\t\t\tvar tmp = this.clone( uniforms[ u ] );\n\n\t\t\tfor ( var p in tmp ) {\n\n\t\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn merged;\n\n\t},\n\n\tclone: function ( uniforms_src ) {\n\n\t\tvar uniforms_dst = {};\n\n\t\tfor ( var u in uniforms_src ) {\n\n\t\t\tuniforms_dst[ u ] = {};\n\n\t\t\tfor ( var p in uniforms_src[ u ] ) {\n\n\t\t\t\tvar parameter_src = uniforms_src[ u ][ p ];\n\n\t\t\t\tif ( parameter_src && ( parameter_src.isColor ||\n\t\t\t\t\tparameter_src.isMatrix3 || parameter_src.isMatrix4 ||\n\t\t\t\t\tparameter_src.isVector2 || parameter_src.isVector3 || parameter_src.isVector4 ||\n\t\t\t\t\tparameter_src.isTexture ) ) {\n\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src.clone();\n\n\t\t\t\t} else if ( Array.isArray( parameter_src ) ) {\n\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src.slice();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn uniforms_dst;\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar ColorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nfunction Color( r, g, b ) {\n\n\tif ( g === undefined && b === undefined ) {\n\n\t\t// r is THREE.Color, hex or string\n\t\treturn this.set( r );\n\n\t}\n\n\treturn this.setRGB( r, g, b );\n\n}\n\nObject.assign( Color.prototype, {\n\n\tisColor: true,\n\n\tr: 1, g: 1, b: 1,\n\n\tset: function ( value ) {\n\n\t\tif ( value && value.isColor ) {\n\n\t\t\tthis.copy( value );\n\n\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\tthis.setHex( value );\n\n\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\tthis.setStyle( value );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetHex: function ( hex ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\treturn this;\n\n\t},\n\n\tsetRGB: function ( r, g, b ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\treturn this;\n\n\t},\n\n\tsetHSL: function () {\n\n\t\tfunction hue2rgb( p, q, t ) {\n\n\t\t\tif ( t < 0 ) t += 1;\n\t\t\tif ( t > 1 ) t -= 1;\n\t\t\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\t\t\tif ( t < 1 / 2 ) return q;\n\t\t\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\t\t\treturn p;\n\n\t\t}\n\n\t\treturn function setHSL( h, s, l ) {\n\n\t\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\t\th = _Math.euclideanModulo( h, 1 );\n\t\t\ts = _Math.clamp( s, 0, 1 );\n\t\t\tl = _Math.clamp( l, 0, 1 );\n\n\t\t\tif ( s === 0 ) {\n\n\t\t\t\tthis.r = this.g = this.b = l;\n\n\t\t\t} else {\n\n\t\t\t\tvar p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\t\tvar q = ( 2 * l ) - p;\n\n\t\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tsetStyle: function ( style ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tvar m;\n\n\t\tif ( m = /^((?:rgb|hsl)a?)\\(\\s*([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tvar color;\n\t\t\tvar name = m[ 1 ];\n\t\t\tvar components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\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 ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\t\t\t\t\t\tvar h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\tvar s = parseInt( color[ 2 ], 10 ) / 100;\n\t\t\t\t\t\tvar l = parseInt( color[ 3 ], 10 ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this.setHSL( h, s, l );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f0-9]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tvar hex = m[ 1 ];\n\t\t\tvar size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( style && style.length > 0 ) {\n\n\t\t\t// color keywords\n\t\t\tvar hex = ColorKeywords[ style ];\n\n\t\t\tif ( hex !== undefined ) {\n\n\t\t\t\t// red\n\t\t\t\tthis.setHex( hex );\n\n\t\t\t} else {\n\n\t\t\t\t// unknown color\n\t\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t},\n\n\tcopy: function ( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t},\n\n\tcopyGammaToLinear: function ( color, gammaFactor ) {\n\n\t\tif ( gammaFactor === undefined ) gammaFactor = 2.0;\n\n\t\tthis.r = Math.pow( color.r, gammaFactor );\n\t\tthis.g = Math.pow( color.g, gammaFactor );\n\t\tthis.b = Math.pow( color.b, gammaFactor );\n\n\t\treturn this;\n\n\t},\n\n\tcopyLinearToGamma: function ( color, gammaFactor ) {\n\n\t\tif ( gammaFactor === undefined ) gammaFactor = 2.0;\n\n\t\tvar safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0;\n\n\t\tthis.r = Math.pow( color.r, safeInverse );\n\t\tthis.g = Math.pow( color.g, safeInverse );\n\t\tthis.b = Math.pow( color.b, safeInverse );\n\n\t\treturn this;\n\n\t},\n\n\tconvertGammaToLinear: function ( gammaFactor ) {\n\n\t\tthis.copyGammaToLinear( this, gammaFactor );\n\n\t\treturn this;\n\n\t},\n\n\tconvertLinearToGamma: function ( gammaFactor ) {\n\n\t\tthis.copyLinearToGamma( this, gammaFactor );\n\n\t\treturn this;\n\n\t},\n\n\tcopySRGBToLinear: function () {\n\n\t\tfunction SRGBToLinear( c ) {\n\n\t\t\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n\t\t}\n\n\t\treturn function copySRGBToLinear( color ) {\n\n\t\t\tthis.r = SRGBToLinear( color.r );\n\t\t\tthis.g = SRGBToLinear( color.g );\n\t\t\tthis.b = SRGBToLinear( color.b );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tcopyLinearToSRGB: function () {\n\n\t\tfunction LinearToSRGB( c ) {\n\n\t\t\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n\t\t}\n\n\t\treturn function copyLinearToSRGB( color ) {\n\n\t\t\tthis.r = LinearToSRGB( color.r );\n\t\t\tthis.g = LinearToSRGB( color.g );\n\t\t\tthis.b = LinearToSRGB( color.b );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tconvertSRGBToLinear: function () {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t},\n\n\tconvertLinearToSRGB: function () {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t},\n\n\tgetHex: function () {\n\n\t\treturn ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0;\n\n\t},\n\n\tgetHexString: function () {\n\n\t\treturn ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 );\n\n\t},\n\n\tgetHSL: function ( target ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Color: .getHSL() target is now required' );\n\t\t\ttarget = { h: 0, s: 0, l: 0 };\n\n\t\t}\n\n\t\tvar r = this.r, g = this.g, b = this.b;\n\n\t\tvar max = Math.max( r, g, b );\n\t\tvar min = Math.min( r, g, b );\n\n\t\tvar hue, saturation;\n\t\tvar lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tvar delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t},\n\n\tgetStyle: function () {\n\n\t\treturn 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';\n\n\t},\n\n\toffsetHSL: function () {\n\n\t\tvar hsl = {};\n\n\t\treturn function ( h, s, l ) {\n\n\t\t\tthis.getHSL( hsl );\n\n\t\t\thsl.h += h; hsl.s += s; hsl.l += l;\n\n\t\t\tthis.setHSL( hsl.h, hsl.s, hsl.l );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tadd: function ( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t},\n\n\taddColors: function ( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t},\n\n\tlerp: function ( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\treturn this.getHex();\n\n\t}\n\n} );\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nvar UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tuvTransform: { value: new Matrix3() },\n\n\t\talphaMap: { value: null },\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 },\n\t\trefractionRatio: { value: 0.98 },\n\t\tmaxMipLevel: { value: 0 }\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalScale: { value: new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {},\n\n\t\t\tshadow: {},\n\t\t\tshadowBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {},\n\n\t\t\tshadow: {},\n\t\t\tshadowBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotShadowMap: { value: [] },\n\t\tspotShadowMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {},\n\n\t\t\tshadow: {},\n\t\t\tshadowBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t}\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author mikael emtinger / http://gomo.se/\n */\n\nvar ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 0.5 },\n\t\t\t\tmetalness: { value: 0.5 },\n\t\t\t\tenvMapIntensity: { value: 1 } // temporary\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.normal_vert,\n\t\tfragmentShader: ShaderChunk.normal_frag\n\n\t},\n\n\t/* -------------------------------------------------------------------------\n\t//\tCube map shader\n\t ------------------------------------------------------------------------- */\n\n\tcube: {\n\n\t\tuniforms: {\n\t\t\ttCube: { value: null },\n\t\t\ttFlip: { value: - 1 },\n\t\t\topacity: { value: 1.0 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: UniformsUtils.merge( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearCoat: { value: 0 },\n\t\t\tclearCoatRoughness: { value: 0 }\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLAnimation() {\n\n\tvar context = null;\n\tvar isAnimating = false;\n\tvar animationLoop = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tif ( isAnimating === false ) return;\n\n\t\tanimationLoop( time, frame );\n\n\t\tcontext.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\tcontext.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLAttributes( gl ) {\n\n\tvar buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tvar array = attribute.array;\n\t\tvar usage = attribute.dynamic ? gl.DYNAMIC_DRAW : gl.STATIC_DRAW;\n\n\t\tvar buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tvar type = gl.FLOAT;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = gl.FLOAT;\n\n\t\t} else if ( array instanceof Float64Array ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' );\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\ttype = gl.UNSIGNED_SHORT;\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = gl.SHORT;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = gl.UNSIGNED_INT;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = gl.INT;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = gl.BYTE;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tvar array = attribute.array;\n\t\tvar updateRange = attribute.updateRange;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( attribute.dynamic === false ) {\n\n\t\t\tgl.bufferData( bufferType, array, gl.STATIC_DRAW );\n\n\t\t} else if ( updateRange.count === - 1 ) {\n\n\t\t\t// Not using update ranges\n\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t} else if ( updateRange.count === 0 ) {\n\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.' );\n\n\t\t} else {\n\n\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\tarray.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );\n\n\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tvar data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tvar data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author bhouston / http://clara.io\n */\n\nfunction Euler( x, y, z, order ) {\n\n\tthis._x = x || 0;\n\tthis._y = y || 0;\n\tthis._z = z || 0;\n\tthis._order = order || Euler.DefaultOrder;\n\n}\n\nEuler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\n\nEuler.DefaultOrder = 'XYZ';\n\nObject.defineProperties( Euler.prototype, {\n\n\tx: {\n\n\t\tget: function () {\n\n\t\t\treturn this._x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._x = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\ty: {\n\n\t\tget: function () {\n\n\t\t\treturn this._y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._y = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tz: {\n\n\t\tget: function () {\n\n\t\t\treturn this._z;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._z = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\torder: {\n\n\t\tget: function () {\n\n\t\t\treturn this._order;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._order = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Euler.prototype, {\n\n\tisEuler: true,\n\n\tset: function ( x, y, z, order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order || this._order;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t},\n\n\tcopy: function ( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromRotationMatrix: function ( m, order, update ) {\n\n\t\tvar clamp = _Math.clamp;\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tvar te = m.elements;\n\t\tvar m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tvar m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tvar m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\torder = order || this._order;\n\n\t\tif ( order === 'XYZ' ) {\n\n\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m13 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\tthis._z = 0;\n\n\t\t\t}\n\n\t\t} else if ( order === 'YXZ' ) {\n\n\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m23 ) < 0.99999 ) {\n\n\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\tthis._z = 0;\n\n\t\t\t}\n\n\t\t} else if ( order === 'ZXY' ) {\n\n\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m32 ) < 0.99999 ) {\n\n\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._y = 0;\n\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t}\n\n\t\t} else if ( order === 'ZYX' ) {\n\n\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m31 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t}\n\n\t\t} else if ( order === 'YZX' ) {\n\n\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m21 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t}\n\n\t\t} else if ( order === 'XZY' ) {\n\n\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m12 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\tthis._y = 0;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() given unsupported order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update !== false ) this.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromQuaternion: function () {\n\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function setFromQuaternion( q, order, update ) {\n\n\t\t\tmatrix.makeRotationFromQuaternion( q );\n\n\t\t\treturn this.setFromRotationMatrix( matrix, order, update );\n\n\t\t};\n\n\t}(),\n\n\tsetFromVector3: function ( v, order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order || this._order );\n\n\t},\n\n\treorder: function () {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\tvar q = new Quaternion();\n\n\t\treturn function reorder( newOrder ) {\n\n\t\t\tq.setFromEuler( this );\n\n\t\t\treturn this.setFromQuaternion( q, newOrder );\n\n\t\t};\n\n\t}(),\n\n\tequals: function ( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t},\n\n\tfromArray: function ( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t},\n\n\ttoVector3: function ( optionalResult ) {\n\n\t\tif ( optionalResult ) {\n\n\t\t\treturn optionalResult.set( this._x, this._y, this._z );\n\n\t\t} else {\n\n\t\t\treturn new Vector3( this._x, this._y, this._z );\n\n\t\t}\n\n\t},\n\n\tonChange: function ( callback ) {\n\n\t\tthis.onChangeCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tonChangeCallback: function () {}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Layers() {\n\n\tthis.mask = 1 | 0;\n\n}\n\nObject.assign( Layers.prototype, {\n\n\tset: function ( channel ) {\n\n\t\tthis.mask = 1 << channel | 0;\n\n\t},\n\n\tenable: function ( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t},\n\n\ttoggle: function ( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t},\n\n\tdisable: function ( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t},\n\n\ttest: function ( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author elephantatwork / www.elephantatwork.ch\n */\n\nvar object3DId = 0;\n\nfunction Object3D() {\n\n\tObject.defineProperty( this, 'id', { value: object3DId ++ } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Object3D';\n\n\tthis.parent = null;\n\tthis.children = [];\n\n\tthis.up = Object3D.DefaultUp.clone();\n\n\tvar position = new Vector3();\n\tvar rotation = new Euler();\n\tvar quaternion = new Quaternion();\n\tvar scale = new Vector3( 1, 1, 1 );\n\n\tfunction onRotationChange() {\n\n\t\tquaternion.setFromEuler( rotation, false );\n\n\t}\n\n\tfunction onQuaternionChange() {\n\n\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t}\n\n\trotation.onChange( onRotationChange );\n\tquaternion.onChange( onQuaternionChange );\n\n\tObject.defineProperties( this, {\n\t\tposition: {\n\t\t\tenumerable: true,\n\t\t\tvalue: position\n\t\t},\n\t\trotation: {\n\t\t\tenumerable: true,\n\t\t\tvalue: rotation\n\t\t},\n\t\tquaternion: {\n\t\t\tenumerable: true,\n\t\t\tvalue: quaternion\n\t\t},\n\t\tscale: {\n\t\t\tenumerable: true,\n\t\t\tvalue: scale\n\t\t},\n\t\tmodelViewMatrix: {\n\t\t\tvalue: new Matrix4()\n\t\t},\n\t\tnormalMatrix: {\n\t\t\tvalue: new Matrix3()\n\t\t}\n\t} );\n\n\tthis.matrix = new Matrix4();\n\tthis.matrixWorld = new Matrix4();\n\n\tthis.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\n\tthis.matrixWorldNeedsUpdate = false;\n\n\tthis.layers = new Layers();\n\tthis.visible = true;\n\n\tthis.castShadow = false;\n\tthis.receiveShadow = false;\n\n\tthis.frustumCulled = true;\n\tthis.renderOrder = 0;\n\n\tthis.userData = {};\n\n}\n\nObject3D.DefaultUp = new Vector3( 0, 1, 0 );\nObject3D.DefaultMatrixAutoUpdate = true;\n\nObject3D.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Object3D,\n\n\tisObject3D: true,\n\n\tonBeforeRender: function () {},\n\tonAfterRender: function () {},\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tthis.matrix.multiplyMatrices( matrix, this.matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t},\n\n\tapplyQuaternion: function ( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t},\n\n\tsetRotationFromAxisAngle: function ( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t},\n\n\tsetRotationFromEuler: function ( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t},\n\n\tsetRotationFromMatrix: function ( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t},\n\n\tsetRotationFromQuaternion: function ( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t},\n\n\trotateOnAxis: function () {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\tvar q1 = new Quaternion();\n\n\t\treturn function rotateOnAxis( axis, angle ) {\n\n\t\t\tq1.setFromAxisAngle( axis, angle );\n\n\t\t\tthis.quaternion.multiply( q1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateOnWorldAxis: function () {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\tvar q1 = new Quaternion();\n\n\t\treturn function rotateOnWorldAxis( axis, angle ) {\n\n\t\t\tq1.setFromAxisAngle( axis, angle );\n\n\t\t\tthis.quaternion.premultiply( q1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateX: function () {\n\n\t\tvar v1 = new Vector3( 1, 0, 0 );\n\n\t\treturn function rotateX( angle ) {\n\n\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t};\n\n\t}(),\n\n\trotateY: function () {\n\n\t\tvar v1 = new Vector3( 0, 1, 0 );\n\n\t\treturn function rotateY( angle ) {\n\n\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t};\n\n\t}(),\n\n\trotateZ: function () {\n\n\t\tvar v1 = new Vector3( 0, 0, 1 );\n\n\t\treturn function rotateZ( angle ) {\n\n\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t};\n\n\t}(),\n\n\ttranslateOnAxis: function () {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function translateOnAxis( axis, distance ) {\n\n\t\t\tv1.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\t\tthis.position.add( v1.multiplyScalar( distance ) );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslateX: function () {\n\n\t\tvar v1 = new Vector3( 1, 0, 0 );\n\n\t\treturn function translateX( distance ) {\n\n\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t};\n\n\t}(),\n\n\ttranslateY: function () {\n\n\t\tvar v1 = new Vector3( 0, 1, 0 );\n\n\t\treturn function translateY( distance ) {\n\n\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t};\n\n\t}(),\n\n\ttranslateZ: function () {\n\n\t\tvar v1 = new Vector3( 0, 0, 1 );\n\n\t\treturn function translateZ( distance ) {\n\n\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t};\n\n\t}(),\n\n\tlocalToWorld: function ( vector ) {\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t},\n\n\tworldToLocal: function () {\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function worldToLocal( vector ) {\n\n\t\t\treturn vector.applyMatrix4( m1.getInverse( this.matrixWorld ) );\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\t// This method does not support objects with rotated and/or translated parent(s)\n\n\t\tvar m1 = new Matrix4();\n\t\tvar vector = new Vector3();\n\n\t\treturn function lookAt( x, y, z ) {\n\n\t\t\tif ( x.isVector3 ) {\n\n\t\t\t\tvector.copy( x );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( x, y, z );\n\n\t\t\t}\n\n\t\t\tif ( this.isCamera ) {\n\n\t\t\t\tm1.lookAt( this.position, vector, this.up );\n\n\t\t\t} else {\n\n\t\t\t\tm1.lookAt( vector, this.position, this.up );\n\n\t\t\t}\n\n\t\t\tthis.quaternion.setFromRotationMatrix( m1 );\n\n\t\t};\n\n\t}(),\n\n\tadd: function ( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( var i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( \"THREE.Object3D.add: object can't be added as a child of itself.\", object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( ( object && object.isObject3D ) ) {\n\n\t\t\tif ( object.parent !== null ) {\n\n\t\t\t\tobject.parent.remove( object );\n\n\t\t\t}\n\n\t\t\tobject.parent = this;\n\t\t\tobject.dispatchEvent( { type: 'added' } );\n\n\t\t\tthis.children.push( object );\n\n\t\t} else {\n\n\t\t\tconsole.error( \"THREE.Object3D.add: object not an instance of THREE.Object3D.\", object );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tremove: function ( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( var i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\n\t\t\tobject.dispatchEvent( { type: 'removed' } );\n\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetObjectById: function ( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t},\n\n\tgetObjectByName: function ( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t},\n\n\tgetObjectByProperty: function ( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( var i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tvar child = this.children[ i ];\n\t\t\tvar object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t},\n\n\tgetWorldPosition: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldPosition() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateMatrixWorld( true );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t},\n\n\tgetWorldQuaternion: function () {\n\n\t\tvar position = new Vector3();\n\t\tvar scale = new Vector3();\n\n\t\treturn function getWorldQuaternion( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldQuaternion() target is now required' );\n\t\t\t\ttarget = new Quaternion();\n\n\t\t\t}\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.matrixWorld.decompose( position, target, scale );\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tgetWorldScale: function () {\n\n\t\tvar position = new Vector3();\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function getWorldScale( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldScale() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.matrixWorld.decompose( position, quaternion, target );\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tgetWorldDirection: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function getWorldDirection( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldDirection() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.getWorldQuaternion( quaternion );\n\n\t\t\treturn target.set( 0, 0, 1 ).applyQuaternion( quaternion );\n\n\t\t};\n\n\t}(),\n\n\traycast: function () {},\n\n\ttraverse: function ( callback ) {\n\n\t\tcallback( this );\n\n\t\tvar children = this.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t},\n\n\ttraverseVisible: function ( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tvar children = this.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t},\n\n\ttraverseAncestors: function ( callback ) {\n\n\t\tvar parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t},\n\n\tupdateMatrix: function () {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// update children\n\n\t\tvar children = this.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].updateMatrixWorld( force );\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tvar isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tvar output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tvar object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData;\n\n\t\tobject.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.geometry !== undefined ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tvar parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tvar shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tvar shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tvar uuids = [];\n\n\t\t\t\tfor ( var i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( var i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tvar geometries = extractFromCache( meta.geometries );\n\t\t\tvar materials = extractFromCache( meta.materials );\n\t\t\tvar textures = extractFromCache( meta.textures );\n\t\t\tvar images = extractFromCache( meta.images );\n\t\t\tvar shapes = extractFromCache( meta.shapes );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tvar values = [];\n\t\t\tfor ( var key in cache ) {\n\n\t\t\t\tvar data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\t\t\treturn values;\n\n\t\t}\n\n\t},\n\n\tclone: function ( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t},\n\n\tcopy: function ( source, recursive ) {\n\n\t\tif ( recursive === undefined ) recursive = true;\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( var i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tvar child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author mikael emtinger / http://gomo.se/\n * @author WestLangley / http://github.com/WestLangley\n*/\n\nfunction Camera() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Camera';\n\n\tthis.matrixWorldInverse = new Matrix4();\n\tthis.projectionMatrix = new Matrix4();\n\n}\n\nCamera.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Camera,\n\n\tisCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tObject3D.prototype.copy.call( this, source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\n\t\treturn this;\n\n\t},\n\n\tgetWorldDirection: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function getWorldDirection( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Camera: .getWorldDirection() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.getWorldQuaternion( quaternion );\n\n\t\t\treturn target.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\n\t\t};\n\n\t}(),\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\tthis.matrixWorldInverse.getInverse( this.matrixWorld );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author arose / http://github.com/arose\n */\n\nfunction OrthographicCamera( left, right, top, bottom, near, far ) {\n\n\tCamera.call( this );\n\n\tthis.type = 'OrthographicCamera';\n\n\tthis.zoom = 1;\n\tthis.view = null;\n\n\tthis.left = left;\n\tthis.right = right;\n\tthis.top = top;\n\tthis.bottom = bottom;\n\n\tthis.near = ( near !== undefined ) ? near : 0.1;\n\tthis.far = ( far !== undefined ) ? far : 2000;\n\n\tthis.updateProjectionMatrix();\n\n}\n\nOrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\tconstructor: OrthographicCamera,\n\n\tisOrthographicCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t},\n\n\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tclearViewOffset: function () {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tupdateProjectionMatrix: function () {\n\n\t\tvar dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tvar dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tvar cx = ( this.right + this.left ) / 2;\n\t\tvar cy = ( this.top + this.bottom ) / 2;\n\n\t\tvar left = cx - dx;\n\t\tvar right = cx + dx;\n\t\tvar top = cy + dy;\n\t\tvar bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tvar zoomW = this.zoom / ( this.view.width / this.view.fullWidth );\n\t\t\tvar zoomH = this.zoom / ( this.view.height / this.view.fullHeight );\n\t\t\tvar scaleW = ( this.right - this.left ) / this.view.width;\n\t\t\tvar scaleH = ( this.top - this.bottom ) / this.view.height;\n\n\t\t\tleft += scaleW * ( this.view.offsetX / zoomW );\n\t\t\tright = left + scaleW * ( this.view.width / zoomW );\n\t\t\ttop -= scaleH * ( this.view.offsetY / zoomH );\n\t\t\tbottom = top - scaleH * ( this.view.height / zoomH );\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Face3( a, b, c, normal, color, materialIndex ) {\n\n\tthis.a = a;\n\tthis.b = b;\n\tthis.c = c;\n\n\tthis.normal = ( normal && normal.isVector3 ) ? normal : new Vector3();\n\tthis.vertexNormals = Array.isArray( normal ) ? normal : [];\n\n\tthis.color = ( color && color.isColor ) ? color : new Color();\n\tthis.vertexColors = Array.isArray( color ) ? color : [];\n\n\tthis.materialIndex = materialIndex !== undefined ? materialIndex : 0;\n\n}\n\nObject.assign( Face3.prototype, {\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.a = source.a;\n\t\tthis.b = source.b;\n\t\tthis.c = source.c;\n\n\t\tthis.normal.copy( source.normal );\n\t\tthis.color.copy( source.color );\n\n\t\tthis.materialIndex = source.materialIndex;\n\n\t\tfor ( var i = 0, il = source.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexNormals[ i ] = source.vertexNormals[ i ].clone();\n\n\t\t}\n\n\t\tfor ( var i = 0, il = source.vertexColors.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexColors[ i ] = source.vertexColors[ i ].clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author kile / http://kile.stravaganza.org/\n * @author alteredq / http://alteredqualia.com/\n * @author mikael emtinger / http://gomo.se/\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author bhouston / http://clara.io\n */\n\nvar geometryId = 0; // Geometry uses even numbers as Id\n\nfunction Geometry() {\n\n\tObject.defineProperty( this, 'id', { value: geometryId += 2 } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Geometry';\n\n\tthis.vertices = [];\n\tthis.colors = [];\n\tthis.faces = [];\n\tthis.faceVertexUvs = [[]];\n\n\tthis.morphTargets = [];\n\tthis.morphNormals = [];\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\tthis.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.elementsNeedUpdate = false;\n\tthis.verticesNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.lineDistancesNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\n}\n\nGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Geometry,\n\n\tisGeometry: true,\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tvar normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\tfor ( var i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tvar vertex = this.vertices[ i ];\n\t\t\tvertex.applyMatrix4( matrix );\n\n\t\t}\n\n\t\tfor ( var i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tvar face = this.faces[ i ];\n\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tface.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.verticesNeedUpdate = true;\n\t\tthis.normalsNeedUpdate = true;\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function () {\n\n\t\t// rotate geometry around world x-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateX( angle ) {\n\n\t\t\tm1.makeRotationX( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateY: function () {\n\n\t\t// rotate geometry around world y-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateY( angle ) {\n\n\t\t\tm1.makeRotationY( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateZ: function () {\n\n\t\t// rotate geometry around world z-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateZ( angle ) {\n\n\t\t\tm1.makeRotationZ( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function () {\n\n\t\t// translate geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function translate( x, y, z ) {\n\n\t\t\tm1.makeTranslation( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tscale: function () {\n\n\t\t// scale geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function scale( x, y, z ) {\n\n\t\t\tm1.makeScale( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\tvar obj = new Object3D();\n\n\t\treturn function lookAt( vector ) {\n\n\t\t\tobj.lookAt( vector );\n\n\t\t\tobj.updateMatrix();\n\n\t\t\tthis.applyMatrix( obj.matrix );\n\n\t\t};\n\n\t}(),\n\n\tfromBufferGeometry: function ( geometry ) {\n\n\t\tvar scope = this;\n\n\t\tvar indices = geometry.index !== null ? geometry.index.array : undefined;\n\t\tvar attributes = geometry.attributes;\n\n\t\tvar positions = attributes.position.array;\n\t\tvar normals = attributes.normal !== undefined ? attributes.normal.array : undefined;\n\t\tvar colors = attributes.color !== undefined ? attributes.color.array : undefined;\n\t\tvar uvs = attributes.uv !== undefined ? attributes.uv.array : undefined;\n\t\tvar uvs2 = attributes.uv2 !== undefined ? attributes.uv2.array : undefined;\n\n\t\tif ( uvs2 !== undefined ) this.faceVertexUvs[ 1 ] = [];\n\n\t\tvar tempNormals = [];\n\t\tvar tempUVs = [];\n\t\tvar tempUVs2 = [];\n\n\t\tfor ( var i = 0, j = 0; i < positions.length; i += 3, j += 2 ) {\n\n\t\t\tscope.vertices.push( new Vector3( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] ) );\n\n\t\t\tif ( normals !== undefined ) {\n\n\t\t\t\ttempNormals.push( new Vector3( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( colors !== undefined ) {\n\n\t\t\t\tscope.colors.push( new Color( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\ttempUVs.push( new Vector2( uvs[ j ], uvs[ j + 1 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( uvs2 !== undefined ) {\n\n\t\t\t\ttempUVs2.push( new Vector2( uvs2[ j ], uvs2[ j + 1 ] ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addFace( a, b, c, materialIndex ) {\n\n\t\t\tvar vertexNormals = normals !== undefined ? [ tempNormals[ a ].clone(), tempNormals[ b ].clone(), tempNormals[ c ].clone() ] : [];\n\t\t\tvar vertexColors = colors !== undefined ? [ scope.colors[ a ].clone(), scope.colors[ b ].clone(), scope.colors[ c ].clone() ] : [];\n\n\t\t\tvar face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex );\n\n\t\t\tscope.faces.push( face );\n\n\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 0 ].push( [ tempUVs[ a ].clone(), tempUVs[ b ].clone(), tempUVs[ c ].clone() ] );\n\n\t\t\t}\n\n\t\t\tif ( uvs2 !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 1 ].push( [ tempUVs2[ a ].clone(), tempUVs2[ b ].clone(), tempUVs2[ c ].clone() ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar groups = geometry.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tfor ( var i = 0; i < groups.length; i ++ ) {\n\n\t\t\t\tvar group = groups[ i ];\n\n\t\t\t\tvar start = group.start;\n\t\t\t\tvar count = group.count;\n\n\t\t\t\tfor ( var j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\t\tif ( indices !== undefined ) {\n\n\t\t\t\t\t\taddFace( indices[ j ], indices[ j + 1 ], indices[ j + 2 ], group.materialIndex );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\taddFace( j, j + 1, j + 2, group.materialIndex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( indices !== undefined ) {\n\n\t\t\t\tfor ( var i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t\taddFace( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( var i = 0; i < positions.length / 3; i += 3 ) {\n\n\t\t\t\t\taddFace( i, i + 1, i + 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeFaceNormals();\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcenter: function () {\n\n\t\tvar offset = new Vector3();\n\n\t\treturn function center() {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t\tthis.boundingBox.getCenter( offset ).negate();\n\n\t\t\tthis.translate( offset.x, offset.y, offset.z );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tnormalize: function () {\n\n\t\tthis.computeBoundingSphere();\n\n\t\tvar center = this.boundingSphere.center;\n\t\tvar radius = this.boundingSphere.radius;\n\n\t\tvar s = radius === 0 ? 1 : 1.0 / radius;\n\n\t\tvar matrix = new Matrix4();\n\t\tmatrix.set(\n\t\t\ts, 0, 0, - s * center.x,\n\t\t\t0, s, 0, - s * center.y,\n\t\t\t0, 0, s, - s * center.z,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\tthis.applyMatrix( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tcomputeFaceNormals: function () {\n\n\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\tfor ( var f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tvar face = this.faces[ f ];\n\n\t\t\tvar vA = this.vertices[ face.a ];\n\t\t\tvar vB = this.vertices[ face.b ];\n\t\t\tvar vC = this.vertices[ face.c ];\n\n\t\t\tcb.subVectors( vC, vB );\n\t\t\tab.subVectors( vA, vB );\n\t\t\tcb.cross( ab );\n\n\t\t\tcb.normalize();\n\n\t\t\tface.normal.copy( cb );\n\n\t\t}\n\n\t},\n\n\tcomputeVertexNormals: function ( areaWeighted ) {\n\n\t\tif ( areaWeighted === undefined ) areaWeighted = true;\n\n\t\tvar v, vl, f, fl, face, vertices;\n\n\t\tvertices = new Array( this.vertices.length );\n\n\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ] = new Vector3();\n\n\t\t}\n\n\t\tif ( areaWeighted ) {\n\n\t\t\t// vertex normals weighted by triangle areas\n\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\n\n\t\t\tvar vA, vB, vC;\n\t\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tvA = this.vertices[ face.a ];\n\t\t\t\tvB = this.vertices[ face.b ];\n\t\t\t\tvC = this.vertices[ face.c ];\n\n\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\tcb.cross( ab );\n\n\t\t\t\tvertices[ face.a ].add( cb );\n\t\t\t\tvertices[ face.b ].add( cb );\n\t\t\t\tvertices[ face.c ].add( cb );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tvertices[ face.a ].add( face.normal );\n\t\t\t\tvertices[ face.b ].add( face.normal );\n\t\t\t\tvertices[ face.c ].add( face.normal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ].normalize();\n\n\t\t}\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( vertices[ face.a ] );\n\t\t\t\tvertexNormals[ 1 ].copy( vertices[ face.b ] );\n\t\t\t\tvertexNormals[ 2 ].copy( vertices[ face.c ] );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = vertices[ face.a ].clone();\n\t\t\t\tvertexNormals[ 1 ] = vertices[ face.b ].clone();\n\t\t\t\tvertexNormals[ 2 ] = vertices[ face.c ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeFlatVertexNormals: function () {\n\n\t\tvar f, fl, face;\n\n\t\tthis.computeFaceNormals();\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 1 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 2 ].copy( face.normal );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 1 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 2 ] = face.normal.clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeMorphNormals: function () {\n\n\t\tvar i, il, f, fl, face;\n\n\t\t// save original normals\n\t\t// - create temp variables on first access\n\t\t// otherwise just copy (for faster repeated calls)\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tif ( ! face.__originalFaceNormal ) {\n\n\t\t\t\tface.__originalFaceNormal = face.normal.clone();\n\n\t\t\t} else {\n\n\t\t\t\tface.__originalFaceNormal.copy( face.normal );\n\n\t\t\t}\n\n\t\t\tif ( ! face.__originalVertexNormals ) face.__originalVertexNormals = [];\n\n\t\t\tfor ( i = 0, il = face.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\tif ( ! face.__originalVertexNormals[ i ] ) {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// use temp geometry to compute face and vertex normals for each morph\n\n\t\tvar tmpGeo = new Geometry();\n\t\ttmpGeo.faces = this.faces;\n\n\t\tfor ( i = 0, il = this.morphTargets.length; i < il; i ++ ) {\n\n\t\t\t// create on first access\n\n\t\t\tif ( ! this.morphNormals[ i ] ) {\n\n\t\t\t\tthis.morphNormals[ i ] = {};\n\t\t\t\tthis.morphNormals[ i ].faceNormals = [];\n\t\t\t\tthis.morphNormals[ i ].vertexNormals = [];\n\n\t\t\t\tvar dstNormalsFace = this.morphNormals[ i ].faceNormals;\n\t\t\t\tvar dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\n\n\t\t\t\tvar faceNormal, vertexNormals;\n\n\t\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tfaceNormal = new Vector3();\n\t\t\t\t\tvertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() };\n\n\t\t\t\t\tdstNormalsFace.push( faceNormal );\n\t\t\t\t\tdstNormalsVertex.push( vertexNormals );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar morphNormals = this.morphNormals[ i ];\n\n\t\t\t// set vertices to morph target\n\n\t\t\ttmpGeo.vertices = this.morphTargets[ i ].vertices;\n\n\t\t\t// compute morph normals\n\n\t\t\ttmpGeo.computeFaceNormals();\n\t\t\ttmpGeo.computeVertexNormals();\n\n\t\t\t// store morph normals\n\n\t\t\tvar faceNormal, vertexNormals;\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tfaceNormal = morphNormals.faceNormals[ f ];\n\t\t\t\tvertexNormals = morphNormals.vertexNormals[ f ];\n\n\t\t\t\tfaceNormal.copy( face.normal );\n\n\t\t\t\tvertexNormals.a.copy( face.vertexNormals[ 0 ] );\n\t\t\t\tvertexNormals.b.copy( face.vertexNormals[ 1 ] );\n\t\t\t\tvertexNormals.c.copy( face.vertexNormals[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// restore original normals\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tface.normal = face.__originalFaceNormal;\n\t\t\tface.vertexNormals = face.__originalVertexNormals;\n\n\t\t}\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.setFromPoints( this.vertices );\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.setFromPoints( this.vertices );\n\n\t},\n\n\tmerge: function ( geometry, matrix, materialIndexOffset ) {\n\n\t\tif ( ! ( geometry && geometry.isGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar normalMatrix,\n\t\t\tvertexOffset = this.vertices.length,\n\t\t\tvertices1 = this.vertices,\n\t\t\tvertices2 = geometry.vertices,\n\t\t\tfaces1 = this.faces,\n\t\t\tfaces2 = geometry.faces,\n\t\t\tuvs1 = this.faceVertexUvs[ 0 ],\n\t\t\tuvs2 = geometry.faceVertexUvs[ 0 ],\n\t\t\tcolors1 = this.colors,\n\t\t\tcolors2 = geometry.colors;\n\n\t\tif ( materialIndexOffset === undefined ) materialIndexOffset = 0;\n\n\t\tif ( matrix !== undefined ) {\n\n\t\t\tnormalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t}\n\n\t\t// vertices\n\n\t\tfor ( var i = 0, il = vertices2.length; i < il; i ++ ) {\n\n\t\t\tvar vertex = vertices2[ i ];\n\n\t\t\tvar vertexCopy = vertex.clone();\n\n\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\n\n\t\t\tvertices1.push( vertexCopy );\n\n\t\t}\n\n\t\t// colors\n\n\t\tfor ( var i = 0, il = colors2.length; i < il; i ++ ) {\n\n\t\t\tcolors1.push( colors2[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tfor ( i = 0, il = faces2.length; i < il; i ++ ) {\n\n\t\t\tvar face = faces2[ i ], faceCopy, normal, color,\n\t\t\t\tfaceVertexNormals = face.vertexNormals,\n\t\t\t\tfaceVertexColors = face.vertexColors;\n\n\t\t\tfaceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );\n\t\t\tfaceCopy.normal.copy( face.normal );\n\n\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\tfaceCopy.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t\tfor ( var j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tnormal = faceVertexNormals[ j ].clone();\n\n\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.vertexNormals.push( normal );\n\n\t\t\t}\n\n\t\t\tfaceCopy.color.copy( face.color );\n\n\t\t\tfor ( var j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {\n\n\t\t\t\tcolor = faceVertexColors[ j ];\n\t\t\t\tfaceCopy.vertexColors.push( color.clone() );\n\n\t\t\t}\n\n\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\n\n\t\t\tfaces1.push( faceCopy );\n\n\t\t}\n\n\t\t// uvs\n\n\t\tfor ( i = 0, il = uvs2.length; i < il; i ++ ) {\n\n\t\t\tvar uv = uvs2[ i ], uvCopy = [];\n\n\t\t\tif ( uv === undefined ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tfor ( var j = 0, jl = uv.length; j < jl; j ++ ) {\n\n\t\t\t\tuvCopy.push( uv[ j ].clone() );\n\n\t\t\t}\n\n\t\t\tuvs1.push( uvCopy );\n\n\t\t}\n\n\t},\n\n\tmergeMesh: function ( mesh ) {\n\n\t\tif ( ! ( mesh && mesh.isMesh ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( mesh.matrixAutoUpdate ) mesh.updateMatrix();\n\n\t\tthis.merge( mesh.geometry, mesh.matrix );\n\n\t},\n\n\t/*\n\t * Checks for duplicate vertices with hashmap.\n\t * Duplicated vertices are removed\n\t * and faces' vertices are updated.\n\t */\n\n\tmergeVertices: function () {\n\n\t\tvar verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n\t\tvar unique = [], changes = [];\n\n\t\tvar v, key;\n\t\tvar precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001\n\t\tvar precision = Math.pow( 10, precisionPoints );\n\t\tvar i, il, face;\n\t\tvar indices, j, jl;\n\n\t\tfor ( i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tv = this.vertices[ i ];\n\t\t\tkey = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision );\n\n\t\t\tif ( verticesMap[ key ] === undefined ) {\n\n\t\t\t\tverticesMap[ key ] = i;\n\t\t\t\tunique.push( this.vertices[ i ] );\n\t\t\t\tchanges[ i ] = unique.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\n\t\t\t\tchanges[ i ] = changes[ verticesMap[ key ] ];\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// if faces are completely degenerate after merging vertices, we\n\t\t// have to remove them from the geometry.\n\t\tvar faceIndicesToRemove = [];\n\n\t\tfor ( i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tface = this.faces[ i ];\n\n\t\t\tface.a = changes[ face.a ];\n\t\t\tface.b = changes[ face.b ];\n\t\t\tface.c = changes[ face.c ];\n\n\t\t\tindices = [ face.a, face.b, face.c ];\n\n\t\t\t// if any duplicate vertices are found in a Face3\n\t\t\t// we have to remove the face as nothing can be saved\n\t\t\tfor ( var n = 0; n < 3; n ++ ) {\n\n\t\t\t\tif ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) {\n\n\t\t\t\t\tfaceIndicesToRemove.push( i );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\n\n\t\t\tvar idx = faceIndicesToRemove[ i ];\n\n\t\t\tthis.faces.splice( idx, 1 );\n\n\t\t\tfor ( j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tthis.faceVertexUvs[ j ].splice( idx, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Use unique set of vertices\n\n\t\tvar diff = this.vertices.length - unique.length;\n\t\tthis.vertices = unique;\n\t\treturn diff;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.vertices = [];\n\n\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tvar point = points[ i ];\n\t\t\tthis.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsortFacesByMaterialIndex: function () {\n\n\t\tvar faces = this.faces;\n\t\tvar length = faces.length;\n\n\t\t// tag faces\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tfaces[ i ]._id = i;\n\n\t\t}\n\n\t\t// sort faces\n\n\t\tfunction materialIndexSort( a, b ) {\n\n\t\t\treturn a.materialIndex - b.materialIndex;\n\n\t\t}\n\n\t\tfaces.sort( materialIndexSort );\n\n\t\t// sort uvs\n\n\t\tvar uvs1 = this.faceVertexUvs[ 0 ];\n\t\tvar uvs2 = this.faceVertexUvs[ 1 ];\n\n\t\tvar newUvs1, newUvs2;\n\n\t\tif ( uvs1 && uvs1.length === length ) newUvs1 = [];\n\t\tif ( uvs2 && uvs2.length === length ) newUvs2 = [];\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tvar id = faces[ i ]._id;\n\n\t\t\tif ( newUvs1 ) newUvs1.push( uvs1[ id ] );\n\t\t\tif ( newUvs2 ) newUvs2.push( uvs2[ id ] );\n\n\t\t}\n\n\t\tif ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1;\n\t\tif ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Geometry',\n\t\t\t\tgenerator: 'Geometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Geometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tvar parameters = this.parameters;\n\n\t\t\tfor ( var key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tvar vertices = [];\n\n\t\tfor ( var i = 0; i < this.vertices.length; i ++ ) {\n\n\t\t\tvar vertex = this.vertices[ i ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tvar faces = [];\n\t\tvar normals = [];\n\t\tvar normalsHash = {};\n\t\tvar colors = [];\n\t\tvar colorsHash = {};\n\t\tvar uvs = [];\n\t\tvar uvsHash = {};\n\n\t\tfor ( var i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\tvar face = this.faces[ i ];\n\n\t\t\tvar hasMaterial = true;\n\t\t\tvar hasFaceUv = false; // deprecated\n\t\t\tvar hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\n\t\t\tvar hasFaceNormal = face.normal.length() > 0;\n\t\t\tvar hasFaceVertexNormal = face.vertexNormals.length > 0;\n\t\t\tvar hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n\t\t\tvar hasFaceVertexColor = face.vertexColors.length > 0;\n\n\t\t\tvar faceType = 0;\n\n\t\t\tfaceType = setBit( faceType, 0, 0 ); // isQuad\n\t\t\tfaceType = setBit( faceType, 1, hasMaterial );\n\t\t\tfaceType = setBit( faceType, 2, hasFaceUv );\n\t\t\tfaceType = setBit( faceType, 3, hasFaceVertexUv );\n\t\t\tfaceType = setBit( faceType, 4, hasFaceNormal );\n\t\t\tfaceType = setBit( faceType, 5, hasFaceVertexNormal );\n\t\t\tfaceType = setBit( faceType, 6, hasFaceColor );\n\t\t\tfaceType = setBit( faceType, 7, hasFaceVertexColor );\n\n\t\t\tfaces.push( faceType );\n\t\t\tfaces.push( face.a, face.b, face.c );\n\t\t\tfaces.push( face.materialIndex );\n\n\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\tvar faceVertexUvs = this.faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 0 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 1 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\tfaces.push( getNormalIndex( face.normal ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 0 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 1 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\tfaces.push( getColorIndex( face.color ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\tvar vertexColors = face.vertexColors;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetColorIndex( vertexColors[ 0 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 1 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setBit( value, position, enabled ) {\n\n\t\t\treturn enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) );\n\n\t\t}\n\n\t\tfunction getNormalIndex( normal ) {\n\n\t\t\tvar hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\n\n\t\t\tif ( normalsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tnormalsHash[ hash ] = normals.length / 3;\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\treturn normalsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getColorIndex( color ) {\n\n\t\t\tvar hash = color.r.toString() + color.g.toString() + color.b.toString();\n\n\t\t\tif ( colorsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tcolorsHash[ hash ] = colors.length;\n\t\t\tcolors.push( color.getHex() );\n\n\t\t\treturn colorsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getUvIndex( uv ) {\n\n\t\t\tvar hash = uv.x.toString() + uv.y.toString();\n\n\t\t\tif ( uvsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tuvsHash[ hash ] = uvs.length / 2;\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\treturn uvsHash[ hash ];\n\n\t\t}\n\n\t\tdata.data = {};\n\n\t\tdata.data.vertices = vertices;\n\t\tdata.data.normals = normals;\n\t\tif ( colors.length > 0 ) data.data.colors = colors;\n\t\tif ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility\n\t\tdata.data.faces = faces;\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t var parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t var values = [];\n\n\t\t for ( var key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t var geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new Geometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tvar i, il, j, jl, k, kl;\n\n\t\t// reset\n\n\t\tthis.vertices = [];\n\t\tthis.colors = [];\n\t\tthis.faces = [];\n\t\tthis.faceVertexUvs = [[]];\n\t\tthis.morphTargets = [];\n\t\tthis.morphNormals = [];\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\t\tthis.lineDistances = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// vertices\n\n\t\tvar vertices = source.vertices;\n\n\t\tfor ( i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\tthis.vertices.push( vertices[ i ].clone() );\n\n\t\t}\n\n\t\t// colors\n\n\t\tvar colors = source.colors;\n\n\t\tfor ( i = 0, il = colors.length; i < il; i ++ ) {\n\n\t\t\tthis.colors.push( colors[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tvar faces = source.faces;\n\n\t\tfor ( i = 0, il = faces.length; i < il; i ++ ) {\n\n\t\t\tthis.faces.push( faces[ i ].clone() );\n\n\t\t}\n\n\t\t// face vertex uvs\n\n\t\tfor ( i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tvar faceVertexUvs = source.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) {\n\n\t\t\t\tthis.faceVertexUvs[ i ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tvar uvs = faceVertexUvs[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( k = 0, kl = uvs.length; k < kl; k ++ ) {\n\n\t\t\t\t\tvar uv = uvs[ k ];\n\n\t\t\t\t\tuvsCopy.push( uv.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tvar morphTargets = source.morphTargets;\n\n\t\tfor ( i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tvar morphTarget = {};\n\t\t\tmorphTarget.name = morphTargets[ i ].name;\n\n\t\t\t// vertices\n\n\t\t\tif ( morphTargets[ i ].vertices !== undefined ) {\n\n\t\t\t\tmorphTarget.vertices = [];\n\n\t\t\t\tfor ( j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// normals\n\n\t\t\tif ( morphTargets[ i ].normals !== undefined ) {\n\n\t\t\t\tmorphTarget.normals = [];\n\n\t\t\t\tfor ( j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.push( morphTarget );\n\n\t\t}\n\n\t\t// morph normals\n\n\t\tvar morphNormals = source.morphNormals;\n\n\t\tfor ( i = 0, il = morphNormals.length; i < il; i ++ ) {\n\n\t\t\tvar morphNormal = {};\n\n\t\t\t// vertex normals\n\n\t\t\tif ( morphNormals[ i ].vertexNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.vertexNormals = [];\n\n\t\t\t\tfor ( j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar srcVertexNormal = morphNormals[ i ].vertexNormals[ j ];\n\t\t\t\t\tvar destVertexNormal = {};\n\n\t\t\t\t\tdestVertexNormal.a = srcVertexNormal.a.clone();\n\t\t\t\t\tdestVertexNormal.b = srcVertexNormal.b.clone();\n\t\t\t\t\tdestVertexNormal.c = srcVertexNormal.c.clone();\n\n\t\t\t\t\tmorphNormal.vertexNormals.push( destVertexNormal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// face normals\n\n\t\t\tif ( morphNormals[ i ].faceNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.faceNormals = [];\n\n\t\t\t\tfor ( j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphNormals.push( morphNormal );\n\n\t\t}\n\n\t\t// skin weights\n\n\t\tvar skinWeights = source.skinWeights;\n\n\t\tfor ( i = 0, il = skinWeights.length; i < il; i ++ ) {\n\n\t\t\tthis.skinWeights.push( skinWeights[ i ].clone() );\n\n\t\t}\n\n\t\t// skin indices\n\n\t\tvar skinIndices = source.skinIndices;\n\n\t\tfor ( i = 0, il = skinIndices.length; i < il; i ++ ) {\n\n\t\t\tthis.skinIndices.push( skinIndices[ i ].clone() );\n\n\t\t}\n\n\t\t// line distances\n\n\t\tvar lineDistances = source.lineDistances;\n\n\t\tfor ( i = 0, il = lineDistances.length; i < il; i ++ ) {\n\n\t\t\tthis.lineDistances.push( lineDistances[ i ] );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tvar boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tvar boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// update flags\n\n\t\tthis.elementsNeedUpdate = source.elementsNeedUpdate;\n\t\tthis.verticesNeedUpdate = source.verticesNeedUpdate;\n\t\tthis.uvsNeedUpdate = source.uvsNeedUpdate;\n\t\tthis.normalsNeedUpdate = source.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = source.colorsNeedUpdate;\n\t\tthis.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;\n\t\tthis.groupsNeedUpdate = source.groupsNeedUpdate;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction BufferAttribute( array, itemSize, normalized ) {\n\n\tif ( Array.isArray( array ) ) {\n\n\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t}\n\n\tthis.name = '';\n\n\tthis.array = array;\n\tthis.itemSize = itemSize;\n\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\tthis.normalized = normalized === true;\n\n\tthis.dynamic = false;\n\tthis.updateRange = { offset: 0, count: - 1 };\n\n\tthis.version = 0;\n\n}\n\nObject.defineProperty( BufferAttribute.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( BufferAttribute.prototype, {\n\n\tisBufferAttribute: true,\n\n\tonUploadCallback: function () {},\n\n\tsetArray: function ( array ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.count = array !== undefined ? array.length / this.itemSize : 0;\n\t\tthis.array = array;\n\n\t\treturn this;\n\n\t},\n\n\tsetDynamic: function ( value ) {\n\n\t\tthis.dynamic = value;\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.dynamic = source.dynamic;\n\n\t\treturn this;\n\n\t},\n\n\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( var i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyArray: function ( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t},\n\n\tcopyColorsArray: function ( colors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\tvar color = colors[ i ];\n\n\t\t\tif ( color === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i );\n\t\t\t\tcolor = new Color();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = color.r;\n\t\t\tarray[ offset ++ ] = color.g;\n\t\t\tarray[ offset ++ ] = color.b;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector2sArray: function ( vectors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tvar vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector2();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector3sArray: function ( vectors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tvar vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector3();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector4sArray: function ( vectors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tvar vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector4();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\t\t\tarray[ offset ++ ] = vector.w;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tset: function ( value, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t},\n\n\tgetX: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize ];\n\n\t},\n\n\tsetX: function ( index, x ) {\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t},\n\n\tgetY: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 1 ];\n\n\t},\n\n\tsetY: function ( index, y ) {\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tgetZ: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 2 ];\n\n\t},\n\n\tsetZ: function ( index, z ) {\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tgetW: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 3 ];\n\n\t},\n\n\tsetW: function ( index, w ) {\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetXY: function ( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZ: function ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tonUpload: function ( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n} );\n\n//\n\nfunction Int8BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int8Array( array ), itemSize, normalized );\n\n}\n\nInt8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt8BufferAttribute.prototype.constructor = Int8BufferAttribute;\n\n\nfunction Uint8BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint8Array( array ), itemSize, normalized );\n\n}\n\nUint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint8BufferAttribute.prototype.constructor = Uint8BufferAttribute;\n\n\nfunction Uint8ClampedBufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize, normalized );\n\n}\n\nUint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute;\n\n\nfunction Int16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int16Array( array ), itemSize, normalized );\n\n}\n\nInt16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt16BufferAttribute.prototype.constructor = Int16BufferAttribute;\n\n\nfunction Uint16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized );\n\n}\n\nUint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint16BufferAttribute.prototype.constructor = Uint16BufferAttribute;\n\n\nfunction Int32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int32Array( array ), itemSize, normalized );\n\n}\n\nInt32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt32BufferAttribute.prototype.constructor = Int32BufferAttribute;\n\n\nfunction Uint32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint32Array( array ), itemSize, normalized );\n\n}\n\nUint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint32BufferAttribute.prototype.constructor = Uint32BufferAttribute;\n\n\nfunction Float32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Float32Array( array ), itemSize, normalized );\n\n}\n\nFloat32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat32BufferAttribute.prototype.constructor = Float32BufferAttribute;\n\n\nfunction Float64BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Float64Array( array ), itemSize, normalized );\n\n}\n\nFloat64BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat64BufferAttribute.prototype.constructor = Float64BufferAttribute;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction DirectGeometry() {\n\n\tthis.vertices = [];\n\tthis.normals = [];\n\tthis.colors = [];\n\tthis.uvs = [];\n\tthis.uvs2 = [];\n\n\tthis.groups = [];\n\n\tthis.morphTargets = {};\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\t// this.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.verticesNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\n}\n\nObject.assign( DirectGeometry.prototype, {\n\n\tcomputeGroups: function ( geometry ) {\n\n\t\tvar group;\n\t\tvar groups = [];\n\t\tvar materialIndex = undefined;\n\n\t\tvar faces = geometry.faces;\n\n\t\tfor ( var i = 0; i < faces.length; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\t// materials\n\n\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tgroup = {\n\t\t\t\t\tstart: i * 3,\n\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( group !== undefined ) {\n\n\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\tgroups.push( group );\n\n\t\t}\n\n\t\tthis.groups = groups;\n\n\t},\n\n\tfromGeometry: function ( geometry ) {\n\n\t\tvar faces = geometry.faces;\n\t\tvar vertices = geometry.vertices;\n\t\tvar faceVertexUvs = geometry.faceVertexUvs;\n\n\t\tvar hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;\n\t\tvar hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;\n\n\t\t// morphs\n\n\t\tvar morphTargets = geometry.morphTargets;\n\t\tvar morphTargetsLength = morphTargets.length;\n\n\t\tvar morphTargetsPosition;\n\n\t\tif ( morphTargetsLength > 0 ) {\n\n\t\t\tmorphTargetsPosition = [];\n\n\t\t\tfor ( var i = 0; i < morphTargetsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsPosition[ i ] = [];\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.position = morphTargetsPosition;\n\n\t\t}\n\n\t\tvar morphNormals = geometry.morphNormals;\n\t\tvar morphNormalsLength = morphNormals.length;\n\n\t\tvar morphTargetsNormal;\n\n\t\tif ( morphNormalsLength > 0 ) {\n\n\t\t\tmorphTargetsNormal = [];\n\n\t\t\tfor ( var i = 0; i < morphNormalsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsNormal[ i ] = [];\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.normal = morphTargetsNormal;\n\n\t\t}\n\n\t\t// skins\n\n\t\tvar skinIndices = geometry.skinIndices;\n\t\tvar skinWeights = geometry.skinWeights;\n\n\t\tvar hasSkinIndices = skinIndices.length === vertices.length;\n\t\tvar hasSkinWeights = skinWeights.length === vertices.length;\n\n\t\t//\n\n\t\tif ( vertices.length > 0 && faces.length === 0 ) {\n\n\t\t\tconsole.error( 'THREE.DirectGeometry: Faceless geometries are not supported.' );\n\n\t\t}\n\n\t\tfor ( var i = 0; i < faces.length; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tthis.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] );\n\n\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tthis.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tvar normal = face.normal;\n\n\t\t\t\tthis.normals.push( normal, normal, normal );\n\n\t\t\t}\n\n\t\t\tvar vertexColors = face.vertexColors;\n\n\t\t\tif ( vertexColors.length === 3 ) {\n\n\t\t\t\tthis.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tvar color = face.color;\n\n\t\t\t\tthis.colors.push( color, color, color );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv === true ) {\n\n\t\t\t\tvar vertexUvs = faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i );\n\n\t\t\t\t\tthis.uvs.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv2 === true ) {\n\n\t\t\t\tvar vertexUvs = faceVertexUvs[ 1 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i );\n\n\t\t\t\t\tthis.uvs2.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// morphs\n\n\t\t\tfor ( var j = 0; j < morphTargetsLength; j ++ ) {\n\n\t\t\t\tvar morphTarget = morphTargets[ j ].vertices;\n\n\t\t\t\tmorphTargetsPosition[ j ].push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] );\n\n\t\t\t}\n\n\t\t\tfor ( var j = 0; j < morphNormalsLength; j ++ ) {\n\n\t\t\t\tvar morphNormal = morphNormals[ j ].vertexNormals[ i ];\n\n\t\t\t\tmorphTargetsNormal[ j ].push( morphNormal.a, morphNormal.b, morphNormal.c );\n\n\t\t\t}\n\n\t\t\t// skins\n\n\t\t\tif ( hasSkinIndices ) {\n\n\t\t\t\tthis.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] );\n\n\t\t\t}\n\n\t\t\tif ( hasSkinWeights ) {\n\n\t\t\t\tthis.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeGroups( geometry );\n\n\t\tthis.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\tthis.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\tthis.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\tthis.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction arrayMax( array ) {\n\n\tif ( array.length === 0 ) return - Infinity;\n\n\tvar max = array[ 0 ];\n\n\tfor ( var i = 1, l = array.length; i < l; ++ i ) {\n\n\t\tif ( array[ i ] > max ) max = array[ i ];\n\n\t}\n\n\treturn max;\n\n}\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar bufferGeometryId = 1; // BufferGeometry uses odd numbers as Id\n\nfunction BufferGeometry() {\n\n\tObject.defineProperty( this, 'id', { value: bufferGeometryId += 2 } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'BufferGeometry';\n\n\tthis.index = null;\n\tthis.attributes = {};\n\n\tthis.morphAttributes = {};\n\n\tthis.groups = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\tthis.drawRange = { start: 0, count: Infinity };\n\n\tthis.userData = {};\n\n}\n\nBufferGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: BufferGeometry,\n\n\tisBufferGeometry: true,\n\n\tgetIndex: function () {\n\n\t\treturn this.index;\n\n\t},\n\n\tsetIndex: function ( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t},\n\n\taddAttribute: function ( name, attribute ) {\n\n\t\tif ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' );\n\n\t\t\treturn this.addAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) );\n\n\t\t}\n\n\t\tif ( name === 'index' ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' );\n\t\t\tthis.setIndex( attribute );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t},\n\n\tgetAttribute: function ( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t},\n\n\tremoveAttribute: function ( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t},\n\n\taddGroup: function ( start, count, materialIndex ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex !== undefined ? materialIndex : 0\n\n\t\t} );\n\n\t},\n\n\tclearGroups: function () {\n\n\t\tthis.groups = [];\n\n\t},\n\n\tsetDrawRange: function ( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t},\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tvar position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tmatrix.applyToBufferAttribute( position );\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tvar normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tvar normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormalMatrix.applyToBufferAttribute( normal );\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function () {\n\n\t\t// rotate geometry around world x-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateX( angle ) {\n\n\t\t\tm1.makeRotationX( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateY: function () {\n\n\t\t// rotate geometry around world y-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateY( angle ) {\n\n\t\t\tm1.makeRotationY( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateZ: function () {\n\n\t\t// rotate geometry around world z-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateZ( angle ) {\n\n\t\t\tm1.makeRotationZ( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function () {\n\n\t\t// translate geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function translate( x, y, z ) {\n\n\t\t\tm1.makeTranslation( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tscale: function () {\n\n\t\t// scale geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function scale( x, y, z ) {\n\n\t\t\tm1.makeScale( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\tvar obj = new Object3D();\n\n\t\treturn function lookAt( vector ) {\n\n\t\t\tobj.lookAt( vector );\n\n\t\t\tobj.updateMatrix();\n\n\t\t\tthis.applyMatrix( obj.matrix );\n\n\t\t};\n\n\t}(),\n\n\tcenter: function () {\n\n\t\tvar offset = new Vector3();\n\n\t\treturn function center() {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t\tthis.boundingBox.getCenter( offset ).negate();\n\n\t\t\tthis.translate( offset.x, offset.y, offset.z );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tsetFromObject: function ( object ) {\n\n\t\t// console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this );\n\n\t\tvar geometry = object.geometry;\n\n\t\tif ( object.isPoints || object.isLine ) {\n\n\t\t\tvar positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 );\n\t\t\tvar colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 );\n\n\t\t\tthis.addAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) );\n\t\t\tthis.addAttribute( 'color', colors.copyColorsArray( geometry.colors ) );\n\n\t\t\tif ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) {\n\n\t\t\t\tvar lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 );\n\n\t\t\t\tthis.addAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t\t}\n\n\t\t} else if ( object.isMesh ) {\n\n\t\t\tif ( geometry && geometry.isGeometry ) {\n\n\t\t\t\tthis.fromGeometry( geometry );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tvar position = [];\n\n\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tvar point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t},\n\n\tupdateFromObject: function ( object ) {\n\n\t\tvar geometry = object.geometry;\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tvar direct = geometry.__directGeometry;\n\n\t\t\tif ( geometry.elementsNeedUpdate === true ) {\n\n\t\t\t\tdirect = undefined;\n\t\t\t\tgeometry.elementsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( direct === undefined ) {\n\n\t\t\t\treturn this.fromGeometry( geometry );\n\n\t\t\t}\n\n\t\t\tdirect.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\t\tdirect.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\t\tdirect.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\t\tdirect.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\t\tdirect.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\t\tgeometry.verticesNeedUpdate = false;\n\t\t\tgeometry.normalsNeedUpdate = false;\n\t\t\tgeometry.colorsNeedUpdate = false;\n\t\t\tgeometry.uvsNeedUpdate = false;\n\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t\tgeometry = direct;\n\n\t\t}\n\n\t\tvar attribute;\n\n\t\tif ( geometry.verticesNeedUpdate === true ) {\n\n\t\t\tattribute = this.attributes.position;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector3sArray( geometry.vertices );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.verticesNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.normalsNeedUpdate === true ) {\n\n\t\t\tattribute = this.attributes.normal;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector3sArray( geometry.normals );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.normalsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.colorsNeedUpdate === true ) {\n\n\t\t\tattribute = this.attributes.color;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyColorsArray( geometry.colors );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.colorsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.uvsNeedUpdate ) {\n\n\t\t\tattribute = this.attributes.uv;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector2sArray( geometry.uvs );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.uvsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.lineDistancesNeedUpdate ) {\n\n\t\t\tattribute = this.attributes.lineDistance;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyArray( geometry.lineDistances );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.lineDistancesNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.groupsNeedUpdate ) {\n\n\t\t\tgeometry.computeGroups( object.geometry );\n\t\t\tthis.groups = geometry.groups;\n\n\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tfromGeometry: function ( geometry ) {\n\n\t\tgeometry.__directGeometry = new DirectGeometry().fromGeometry( geometry );\n\n\t\treturn this.fromDirectGeometry( geometry.__directGeometry );\n\n\t},\n\n\tfromDirectGeometry: function ( geometry ) {\n\n\t\tvar positions = new Float32Array( geometry.vertices.length * 3 );\n\t\tthis.addAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) );\n\n\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\tvar normals = new Float32Array( geometry.normals.length * 3 );\n\t\t\tthis.addAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) );\n\n\t\t}\n\n\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\tvar colors = new Float32Array( geometry.colors.length * 3 );\n\t\t\tthis.addAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs.length > 0 ) {\n\n\t\t\tvar uvs = new Float32Array( geometry.uvs.length * 2 );\n\t\t\tthis.addAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs2.length > 0 ) {\n\n\t\t\tvar uvs2 = new Float32Array( geometry.uvs2.length * 2 );\n\t\t\tthis.addAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) );\n\n\t\t}\n\n\t\t// groups\n\n\t\tthis.groups = geometry.groups;\n\n\t\t// morphs\n\n\t\tfor ( var name in geometry.morphTargets ) {\n\n\t\t\tvar array = [];\n\t\t\tvar morphTargets = geometry.morphTargets[ name ];\n\n\t\t\tfor ( var i = 0, l = morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\tvar morphTarget = morphTargets[ i ];\n\n\t\t\t\tvar attribute = new Float32BufferAttribute( morphTarget.length * 3, 3 );\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\t// skinning\n\n\t\tif ( geometry.skinIndices.length > 0 ) {\n\n\t\t\tvar skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 );\n\t\t\tthis.addAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );\n\n\t\t}\n\n\t\tif ( geometry.skinWeights.length > 0 ) {\n\n\t\t\tvar skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 );\n\t\t\tthis.addAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tvar position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tvar box = new Box3();\n\t\tvar vector = new Vector3();\n\n\t\treturn function computeBoundingSphere() {\n\n\t\t\tif ( this.boundingSphere === null ) {\n\n\t\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t\t}\n\n\t\t\tvar position = this.attributes.position;\n\n\t\t\tif ( position ) {\n\n\t\t\t\tvar center = this.boundingSphere.center;\n\n\t\t\t\tbox.setFromBufferAttribute( position );\n\t\t\t\tbox.getCenter( center );\n\n\t\t\t\t// hoping to find a boundingSphere with a radius smaller than the\n\t\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\t\tvar maxRadiusSq = 0;\n\n\t\t\t\tfor ( var i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t\tvector.x = position.getX( i );\n\t\t\t\t\tvector.y = position.getY( i );\n\t\t\t\t\tvector.z = position.getZ( i );\n\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) );\n\n\t\t\t\t}\n\n\t\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\tcomputeFaceNormals: function () {\n\n\t\t// backwards compatibility\n\n\t},\n\n\tcomputeVertexNormals: function () {\n\n\t\tvar index = this.index;\n\t\tvar attributes = this.attributes;\n\t\tvar groups = this.groups;\n\n\t\tif ( attributes.position ) {\n\n\t\t\tvar positions = attributes.position.array;\n\n\t\t\tif ( attributes.normal === undefined ) {\n\n\t\t\t\tthis.addAttribute( 'normal', new BufferAttribute( new Float32Array( positions.length ), 3 ) );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tvar array = attributes.normal.array;\n\n\t\t\t\tfor ( var i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t\t\tarray[ i ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar normals = attributes.normal.array;\n\n\t\t\tvar vA, vB, vC;\n\t\t\tvar pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tvar indices = index.array;\n\n\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tthis.addGroup( 0, indices.length );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var j = 0, jl = groups.length; j < jl; ++ j ) {\n\n\t\t\t\t\tvar group = groups[ j ];\n\n\t\t\t\t\tvar start = group.start;\n\t\t\t\t\tvar count = group.count;\n\n\t\t\t\t\tfor ( var i = start, il = start + count; i < il; i += 3 ) {\n\n\t\t\t\t\t\tvA = indices[ i + 0 ] * 3;\n\t\t\t\t\t\tvB = indices[ i + 1 ] * 3;\n\t\t\t\t\t\tvC = indices[ i + 2 ] * 3;\n\n\t\t\t\t\t\tpA.fromArray( positions, vA );\n\t\t\t\t\t\tpB.fromArray( positions, vB );\n\t\t\t\t\t\tpC.fromArray( positions, vC );\n\n\t\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\t\tnormals[ vA ] += cb.x;\n\t\t\t\t\t\tnormals[ vA + 1 ] += cb.y;\n\t\t\t\t\t\tnormals[ vA + 2 ] += cb.z;\n\n\t\t\t\t\t\tnormals[ vB ] += cb.x;\n\t\t\t\t\t\tnormals[ vB + 1 ] += cb.y;\n\t\t\t\t\t\tnormals[ vB + 2 ] += cb.z;\n\n\t\t\t\t\t\tnormals[ vC ] += cb.x;\n\t\t\t\t\t\tnormals[ vC + 1 ] += cb.y;\n\t\t\t\t\t\tnormals[ vC + 2 ] += cb.z;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( var i = 0, il = positions.length; i < il; i += 9 ) {\n\n\t\t\t\t\tpA.fromArray( positions, i );\n\t\t\t\t\tpB.fromArray( positions, i + 3 );\n\t\t\t\t\tpC.fromArray( positions, i + 6 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormals[ i ] = cb.x;\n\t\t\t\t\tnormals[ i + 1 ] = cb.y;\n\t\t\t\t\tnormals[ i + 2 ] = cb.z;\n\n\t\t\t\t\tnormals[ i + 3 ] = cb.x;\n\t\t\t\t\tnormals[ i + 4 ] = cb.y;\n\t\t\t\t\tnormals[ i + 5 ] = cb.z;\n\n\t\t\t\t\tnormals[ i + 6 ] = cb.x;\n\t\t\t\t\tnormals[ i + 7 ] = cb.y;\n\t\t\t\t\tnormals[ i + 8 ] = cb.z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tattributes.normal.needsUpdate = true;\n\n\t\t}\n\n\t},\n\n\tmerge: function ( geometry, offset ) {\n\n\t\tif ( ! ( geometry && geometry.isBufferGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( offset === undefined ) {\n\n\t\t\toffset = 0;\n\n\t\t\tconsole.warn(\n\t\t\t\t'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. '\n\t\t\t\t+ 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.'\n\t\t\t);\n\n\t\t}\n\n\t\tvar attributes = this.attributes;\n\n\t\tfor ( var key in attributes ) {\n\n\t\t\tif ( geometry.attributes[ key ] === undefined ) continue;\n\n\t\t\tvar attribute1 = attributes[ key ];\n\t\t\tvar attributeArray1 = attribute1.array;\n\n\t\t\tvar attribute2 = geometry.attributes[ key ];\n\t\t\tvar attributeArray2 = attribute2.array;\n\n\t\t\tvar attributeSize = attribute2.itemSize;\n\n\t\t\tfor ( var i = 0, j = attributeSize * offset; i < attributeArray2.length; i ++, j ++ ) {\n\n\t\t\t\tattributeArray1[ j ] = attributeArray2[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tnormalizeNormals: function () {\n\n\t\tvar vector = new Vector3();\n\n\t\treturn function normalizeNormals() {\n\n\t\t\tvar normals = this.attributes.normal;\n\n\t\t\tfor ( var i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t\tvector.x = normals.getX( i );\n\t\t\t\tvector.y = normals.getY( i );\n\t\t\t\tvector.z = normals.getZ( i );\n\n\t\t\t\tvector.normalize();\n\n\t\t\t\tnormals.setXYZ( i, vector.x, vector.y, vector.z );\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\ttoNonIndexed: function () {\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar geometry2 = new BufferGeometry();\n\n\t\tvar indices = this.index.array;\n\t\tvar attributes = this.attributes;\n\n\t\tfor ( var name in attributes ) {\n\n\t\t\tvar attribute = attributes[ name ];\n\n\t\t\tvar array = attribute.array;\n\t\t\tvar itemSize = attribute.itemSize;\n\n\t\t\tvar array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tvar index = 0, index2 = 0;\n\n\t\t\tfor ( var i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\tfor ( var j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry2.addAttribute( name, new BufferAttribute( array2, itemSize ) );\n\n\t\t}\n\n\t\tvar groups = this.groups;\n\n\t\tfor ( var i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tvar group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tvar parameters = this.parameters;\n\n\t\t\tfor ( var key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tdata.data = { attributes: {} };\n\n\t\tvar index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tvar array = Array.prototype.slice.call( index.array );\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: array\n\t\t\t};\n\n\t\t}\n\n\t\tvar attributes = this.attributes;\n\n\t\tfor ( var key in attributes ) {\n\n\t\t\tvar attribute = attributes[ key ];\n\n\t\t\tvar array = Array.prototype.slice.call( attribute.array );\n\n\t\t\tdata.data.attributes[ key ] = {\n\t\t\t\titemSize: attribute.itemSize,\n\t\t\t\ttype: attribute.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: attribute.normalized\n\t\t\t};\n\n\t\t}\n\n\t\tvar groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tvar boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t var parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t var values = [];\n\n\t\t for ( var key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t var geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new BufferGeometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tvar name, i, l;\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tvar index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone() );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tvar attributes = source.attributes;\n\n\t\tfor ( name in attributes ) {\n\n\t\t\tvar attribute = attributes[ name ];\n\t\t\tthis.addAttribute( name, attribute.clone() );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tvar morphAttributes = source.morphAttributes;\n\n\t\tfor ( name in morphAttributes ) {\n\n\t\t\tvar array = [];\n\t\t\tvar morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone() );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\t// groups\n\n\t\tvar groups = source.groups;\n\n\t\tfor ( i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tvar group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tvar boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tvar boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// BoxGeometry\n\nfunction BoxGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'BoxGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\tdepth: depth,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tdepthSegments: depthSegments\n\t};\n\n\tthis.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) );\n\tthis.mergeVertices();\n\n}\n\nBoxGeometry.prototype = Object.create( Geometry.prototype );\nBoxGeometry.prototype.constructor = BoxGeometry;\n\n// BoxBufferGeometry\n\nfunction BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'BoxBufferGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\tdepth: depth,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tdepthSegments: depthSegments\n\t};\n\n\tvar scope = this;\n\n\twidth = width || 1;\n\theight = height || 1;\n\tdepth = depth || 1;\n\n\t// segments\n\n\twidthSegments = Math.floor( widthSegments ) || 1;\n\theightSegments = Math.floor( heightSegments ) || 1;\n\tdepthSegments = Math.floor( depthSegments ) || 1;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar numberOfVertices = 0;\n\tvar groupStart = 0;\n\n\t// build each side of the box geometry\n\n\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\tvar segmentWidth = width / gridX;\n\t\tvar segmentHeight = height / gridY;\n\n\t\tvar widthHalf = width / 2;\n\t\tvar heightHalf = height / 2;\n\t\tvar depthHalf = depth / 2;\n\n\t\tvar gridX1 = gridX + 1;\n\t\tvar gridY1 = gridY + 1;\n\n\t\tvar vertexCounter = 0;\n\t\tvar groupCount = 0;\n\n\t\tvar ix, iy;\n\n\t\tvar vector = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tvar y = iy * segmentHeight - heightHalf;\n\n\t\t\tfor ( ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tvar x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t// set values to correct vector component\n\n\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t// set values to correct vector component\n\n\t\t\t\tvector[ u ] = 0;\n\t\t\t\tvector[ v ] = 0;\n\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t// uvs\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t// counters\n\n\t\t\t\tvertexCounter += 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\t// 1. you need three indices to draw a single face\n\t\t// 2. a single segment consists of two faces\n\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\tfor ( iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tvar a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\tvar b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\tvar c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tvar d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t// increase counter\n\n\t\t\t\tgroupCount += 6;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t// calculate new start value for groups\n\n\t\tgroupStart += groupCount;\n\n\t\t// update total number of vertices\n\n\t\tnumberOfVertices += vertexCounter;\n\n\t}\n\n}\n\nBoxBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nBoxBufferGeometry.prototype.constructor = BoxBufferGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// PlaneGeometry\n\nfunction PlaneGeometry( width, height, widthSegments, heightSegments ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'PlaneGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments\n\t};\n\n\tthis.fromBufferGeometry( new PlaneBufferGeometry( width, height, widthSegments, heightSegments ) );\n\tthis.mergeVertices();\n\n}\n\nPlaneGeometry.prototype = Object.create( Geometry.prototype );\nPlaneGeometry.prototype.constructor = PlaneGeometry;\n\n// PlaneBufferGeometry\n\nfunction PlaneBufferGeometry( width, height, widthSegments, heightSegments ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'PlaneBufferGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments\n\t};\n\n\twidth = width || 1;\n\theight = height || 1;\n\n\tvar width_half = width / 2;\n\tvar height_half = height / 2;\n\n\tvar gridX = Math.floor( widthSegments ) || 1;\n\tvar gridY = Math.floor( heightSegments ) || 1;\n\n\tvar gridX1 = gridX + 1;\n\tvar gridY1 = gridY + 1;\n\n\tvar segment_width = width / gridX;\n\tvar segment_height = height / gridY;\n\n\tvar ix, iy;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// generate vertices, normals and uvs\n\n\tfor ( iy = 0; iy < gridY1; iy ++ ) {\n\n\t\tvar y = iy * segment_height - height_half;\n\n\t\tfor ( ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\tvar x = ix * segment_width - width_half;\n\n\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\tuvs.push( ix / gridX );\n\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tfor ( iy = 0; iy < gridY; iy ++ ) {\n\n\t\tfor ( ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\tvar a = ix + gridX1 * iy;\n\t\t\tvar b = ix + gridX1 * ( iy + 1 );\n\t\t\tvar c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\tvar d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nPlaneBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nPlaneBufferGeometry.prototype.constructor = PlaneBufferGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nvar materialId = 0;\n\nfunction Material() {\n\n\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Material';\n\n\tthis.fog = true;\n\tthis.lights = true;\n\n\tthis.blending = NormalBlending;\n\tthis.side = FrontSide;\n\tthis.flatShading = false;\n\tthis.vertexColors = NoColors; // THREE.NoColors, THREE.VertexColors, THREE.FaceColors\n\n\tthis.opacity = 1;\n\tthis.transparent = false;\n\n\tthis.blendSrc = SrcAlphaFactor;\n\tthis.blendDst = OneMinusSrcAlphaFactor;\n\tthis.blendEquation = AddEquation;\n\tthis.blendSrcAlpha = null;\n\tthis.blendDstAlpha = null;\n\tthis.blendEquationAlpha = null;\n\n\tthis.depthFunc = LessEqualDepth;\n\tthis.depthTest = true;\n\tthis.depthWrite = true;\n\n\tthis.clippingPlanes = null;\n\tthis.clipIntersection = false;\n\tthis.clipShadows = false;\n\n\tthis.shadowSide = null;\n\n\tthis.colorWrite = true;\n\n\tthis.precision = null; // override the renderer's default precision for this material\n\n\tthis.polygonOffset = false;\n\tthis.polygonOffsetFactor = 0;\n\tthis.polygonOffsetUnits = 0;\n\n\tthis.dithering = false;\n\n\tthis.alphaTest = 0;\n\tthis.premultipliedAlpha = false;\n\n\tthis.overdraw = 0; // Overdrawn pixels (typically between 0 and 1) for fixing antialiasing gaps in CanvasRenderer\n\n\tthis.visible = true;\n\n\tthis.userData = {};\n\n\tthis.needsUpdate = true;\n\n}\n\nMaterial.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Material,\n\n\tisMaterial: true,\n\n\tonBeforeCompile: function () {},\n\n\tsetValues: function ( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( var key in values ) {\n\n\t\t\tvar newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( \"THREE.Material: '\" + key + \"' parameter is undefined.\" );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// for backward compatability if shading is set in the constructor\n\t\t\tif ( key === 'shading' ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\t\tthis.flatShading = ( newValue === FlatShading ) ? true : false;\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tvar currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( \"THREE.\" + this.type + \": '\" + key + \"' is not a property of this material.\" );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else if ( key === 'overdraw' ) {\n\n\t\t\t\t// ensure overdraw is backwards-compatible with legacy boolean type\n\t\t\t\tthis[ key ] = Number( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar isRoot = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRoot ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearCoat !== undefined ) data.clearCoat = this.clearCoat;\n\t\tif ( this.clearCoatRoughness !== undefined ) data.clearCoatRoughness = this.clearCoatRoughness;\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\t\tif ( this.lightMap && this.lightMap.isTexture ) data.lightMap = this.lightMap.toJSON( meta ).uuid;\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\t\t\tdata.reflectivity = this.reflectivity; // Scale behind envMap\n\n\t\t}\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors !== NoColors ) data.vertexColors = this.vertexColors;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = this.transparent;\n\n\t\tdata.depthFunc = this.depthFunc;\n\t\tdata.depthTest = this.depthTest;\n\t\tdata.depthWrite = this.depthWrite;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\n\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.morphTargets === true ) data.morphTargets = true;\n\t\tif ( this.skinning === true ) data.skinning = true;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tvar values = [];\n\n\t\t\tfor ( var key in cache ) {\n\n\t\t\t\tvar data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRoot ) {\n\n\t\t\tvar textures = extractFromCache( meta.textures );\n\t\t\tvar images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.fog = source.fog;\n\t\tthis.lights = source.lights;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.flatShading = source.flatShading;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\n\t\tthis.overdraw = source.overdraw;\n\n\t\tthis.visible = source.visible;\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tthis.clipShadows = source.clipShadows;\n\t\tthis.clipIntersection = source.clipIntersection;\n\n\t\tvar srcPlanes = source.clippingPlanes,\n\t\t\tdstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tvar n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( var i = 0; i !== n; ++ i )\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: <hex>,\n * opacity: <float>,\n * map: new THREE.Texture( <Image> ),\n *\n * lightMap: new THREE.Texture( <Image> ),\n * lightMapIntensity: <float>\n *\n * aoMap: new THREE.Texture( <Image> ),\n * aoMapIntensity: <float>\n *\n * specularMap: new THREE.Texture( <Image> ),\n *\n * alphaMap: new THREE.Texture( <Image> ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: <float>,\n * refractionRatio: <float>,\n *\n * depthTest: <bool>,\n * depthWrite: <bool>,\n *\n * wireframe: <boolean>,\n * wireframeLinewidth: <float>,\n *\n * skinning: <bool>,\n * morphTargets: <bool>\n * }\n */\n\nfunction MeshBasicMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshBasicMaterial';\n\n\tthis.color = new Color( 0xffffff ); // emissive\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshBasicMaterial.prototype = Object.create( Material.prototype );\nMeshBasicMaterial.prototype.constructor = MeshBasicMaterial;\n\nMeshBasicMaterial.prototype.isMeshBasicMaterial = true;\n\nMeshBasicMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * defines: { \"label\" : \"value\" },\n * uniforms: { \"parameter1\": { value: 1.0 }, \"parameter2\": { value2: 2 } },\n *\n * fragmentShader: <string>,\n * vertexShader: <string>,\n *\n * wireframe: <boolean>,\n * wireframeLinewidth: <float>,\n *\n * lights: <bool>,\n *\n * skinning: <bool>,\n * morphTargets: <bool>,\n * morphNormals: <bool>\n * }\n */\n\nfunction ShaderMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'ShaderMaterial';\n\n\tthis.defines = {};\n\tthis.uniforms = {};\n\n\tthis.vertexShader = 'void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}';\n\tthis.fragmentShader = 'void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}';\n\n\tthis.linewidth = 1;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false; // set to use scene fog\n\tthis.lights = false; // set to use scene lights\n\tthis.clipping = false; // set to use user-defined clipping planes\n\n\tthis.skinning = false; // set to use skinning attribute streams\n\tthis.morphTargets = false; // set to use morph targets\n\tthis.morphNormals = false; // set to use morph normals\n\n\tthis.extensions = {\n\t\tderivatives: false, // set to use derivatives\n\t\tfragDepth: false, // set to use fragment depth values\n\t\tdrawBuffers: false, // set to use draw buffers\n\t\tshaderTextureLOD: false // set to use shader texture LOD\n\t};\n\n\t// When rendered geometry doesn't include these attributes but the material does,\n\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\tthis.defaultAttributeValues = {\n\t\t'color': [ 1, 1, 1 ],\n\t\t'uv': [ 0, 0 ],\n\t\t'uv2': [ 0, 0 ]\n\t};\n\n\tthis.index0AttributeName = undefined;\n\tthis.uniformsNeedUpdate = false;\n\n\tif ( parameters !== undefined ) {\n\n\t\tif ( parameters.attributes !== undefined ) {\n\n\t\t\tconsole.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n}\n\nShaderMaterial.prototype = Object.create( Material.prototype );\nShaderMaterial.prototype.constructor = ShaderMaterial;\n\nShaderMaterial.prototype.isShaderMaterial = true;\n\nShaderMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.fragmentShader = source.fragmentShader;\n\tthis.vertexShader = source.vertexShader;\n\n\tthis.uniforms = UniformsUtils.clone( source.uniforms );\n\n\tthis.defines = Object.assign( {}, source.defines );\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\tthis.lights = source.lights;\n\tthis.clipping = source.clipping;\n\n\tthis.skinning = source.skinning;\n\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\tthis.extensions = source.extensions;\n\n\treturn this;\n\n};\n\nShaderMaterial.prototype.toJSON = function ( meta ) {\n\n\tvar data = Material.prototype.toJSON.call( this, meta );\n\n\tdata.uniforms = this.uniforms;\n\tdata.vertexShader = this.vertexShader;\n\tdata.fragmentShader = this.fragmentShader;\n\n\treturn data;\n\n};\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Ray( origin, direction ) {\n\n\tthis.origin = ( origin !== undefined ) ? origin : new Vector3();\n\tthis.direction = ( direction !== undefined ) ? direction : new Vector3();\n\n}\n\nObject.assign( Ray.prototype, {\n\n\tset: function ( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t},\n\n\tat: function ( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( t ).add( this.origin );\n\n\t},\n\n\tlookAt: function ( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t},\n\n\trecast: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function recast( t ) {\n\n\t\t\tthis.origin.copy( this.at( t, v1 ) );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclosestPointToPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tvar directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t},\n\n\tdistanceToPoint: function ( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t},\n\n\tdistanceSqToPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function distanceSqToPoint( point ) {\n\n\t\t\tvar directionDistance = v1.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t\t// point behind the ray\n\n\t\t\tif ( directionDistance < 0 ) {\n\n\t\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t\t}\n\n\t\t\tv1.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\t\treturn v1.distanceToSquared( point );\n\n\t\t};\n\n\t}(),\n\n\tdistanceSqToSegment: function () {\n\n\t\tvar segCenter = new Vector3();\n\t\tvar segDir = new Vector3();\n\t\tvar diff = new Vector3();\n\n\t\treturn function distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t\t// It returns the min distance between the ray and the segment\n\t\t\t// defined by v0 and v1\n\t\t\t// It can also set two optional targets :\n\t\t\t// - The closest point on the ray\n\t\t\t// - The closest point on the segment\n\n\t\t\tsegCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t\tsegDir.copy( v1 ).sub( v0 ).normalize();\n\t\t\tdiff.copy( this.origin ).sub( segCenter );\n\n\t\t\tvar segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\t\tvar a01 = - this.direction.dot( segDir );\n\t\t\tvar b0 = diff.dot( this.direction );\n\t\t\tvar b1 = - diff.dot( segDir );\n\t\t\tvar c = diff.lengthSq();\n\t\t\tvar det = Math.abs( 1 - a01 * a01 );\n\t\t\tvar s0, s1, sqrDist, extDet;\n\n\t\t\tif ( det > 0 ) {\n\n\t\t\t\t// The ray and segment are not parallel.\n\n\t\t\t\ts0 = a01 * b1 - b0;\n\t\t\t\ts1 = a01 * b0 - b1;\n\t\t\t\textDet = segExtent * det;\n\n\t\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\t\tvar invDet = 1 / det;\n\t\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 5\n\n\t\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t\t// region 4\n\n\t\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 3\n\n\t\t\t\t\t\ts0 = 0;\n\t\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 2\n\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Ray and segment are parallel.\n\n\t\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t}\n\n\t\t\tif ( optionalPointOnRay ) {\n\n\t\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t\t}\n\n\t\t\tif ( optionalPointOnSegment ) {\n\n\t\t\t\toptionalPointOnSegment.copy( segDir ).multiplyScalar( s1 ).add( segCenter );\n\n\t\t\t}\n\n\t\t\treturn sqrDist;\n\n\t\t};\n\n\t}(),\n\n\tintersectSphere: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function intersectSphere( sphere, target ) {\n\n\t\t\tv1.subVectors( sphere.center, this.origin );\n\t\t\tvar tca = v1.dot( this.direction );\n\t\t\tvar d2 = v1.dot( v1 ) - tca * tca;\n\t\t\tvar radius2 = sphere.radius * sphere.radius;\n\n\t\t\tif ( d2 > radius2 ) return null;\n\n\t\t\tvar thc = Math.sqrt( radius2 - d2 );\n\n\t\t\t// t0 = first intersect point - entrance on front of sphere\n\t\t\tvar t0 = tca - thc;\n\n\t\t\t// t1 = second intersect point - exit point on back of sphere\n\t\t\tvar t1 = tca + thc;\n\n\t\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t\t// test to see if t0 is behind the ray:\n\t\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t\t// in order to always return an intersect point that is in front of the ray.\n\t\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\t\treturn this.at( t0, target );\n\n\t\t};\n\n\t}(),\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) <= sphere.radius;\n\n\t},\n\n\tdistanceToPlane: function ( plane ) {\n\n\t\tvar denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t},\n\n\tintersectPlane: function ( plane, target ) {\n\n\t\tvar t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t},\n\n\tintersectsPlane: function ( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tvar distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tvar denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t},\n\n\tintersectBox: function ( box, target ) {\n\n\t\tvar tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tvar invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tvar origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\t// These lines also handle the case where tmin or tmax is NaN\n\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\n\n\t\tif ( tymin > tmin || tmin !== tmin ) tmin = tymin;\n\n\t\tif ( tymax < tmax || tmax !== tmax ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t},\n\n\tintersectsBox: ( function () {\n\n\t\tvar v = new Vector3();\n\n\t\treturn function intersectsBox( box ) {\n\n\t\t\treturn this.intersectBox( box, v ) !== null;\n\n\t\t};\n\n\t} )(),\n\n\tintersectTriangle: function () {\n\n\t\t// Compute the offset origin, edges, and normal.\n\t\tvar diff = new Vector3();\n\t\tvar edge1 = new Vector3();\n\t\tvar edge2 = new Vector3();\n\t\tvar normal = new Vector3();\n\n\t\treturn function intersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t\tedge1.subVectors( b, a );\n\t\t\tedge2.subVectors( c, a );\n\t\t\tnormal.crossVectors( edge1, edge2 );\n\n\t\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\t\tvar DdN = this.direction.dot( normal );\n\t\t\tvar sign;\n\n\t\t\tif ( DdN > 0 ) {\n\n\t\t\t\tif ( backfaceCulling ) return null;\n\t\t\t\tsign = 1;\n\n\t\t\t} else if ( DdN < 0 ) {\n\n\t\t\t\tsign = - 1;\n\t\t\t\tDdN = - DdN;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tdiff.subVectors( this.origin, a );\n\t\t\tvar DdQxE2 = sign * this.direction.dot( edge2.crossVectors( diff, edge2 ) );\n\n\t\t\t// b1 < 0, no intersection\n\t\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tvar DdE1xQ = sign * this.direction.dot( edge1.cross( diff ) );\n\n\t\t\t// b2 < 0, no intersection\n\t\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// b1+b2 > 1, no intersection\n\t\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// Line intersects triangle, check if ray does.\n\t\t\tvar QdN = - sign * diff.dot( normal );\n\n\t\t\t// t < 0, no intersection\n\t\t\tif ( QdN < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// Ray intersects triangle.\n\t\t\treturn this.at( QdN / DdN, target );\n\n\t\t};\n\n\t}(),\n\n\tapplyMatrix4: function ( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Line3( start, end ) {\n\n\tthis.start = ( start !== undefined ) ? start : new Vector3();\n\tthis.end = ( end !== undefined ) ? end : new Vector3();\n\n}\n\nObject.assign( Line3.prototype, {\n\n\tset: function ( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t},\n\n\tgetCenter: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t},\n\n\tdelta: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .delta() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t},\n\n\tdistanceSq: function () {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t},\n\n\tdistance: function () {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t},\n\n\tat: function ( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t},\n\n\tclosestPointToPointParameter: function () {\n\n\t\tvar startP = new Vector3();\n\t\tvar startEnd = new Vector3();\n\n\t\treturn function closestPointToPointParameter( point, clampToLine ) {\n\n\t\t\tstartP.subVectors( point, this.start );\n\t\t\tstartEnd.subVectors( this.end, this.start );\n\n\t\t\tvar startEnd2 = startEnd.dot( startEnd );\n\t\t\tvar startEnd_startP = startEnd.dot( startP );\n\n\t\t\tvar t = startEnd_startP / startEnd2;\n\n\t\t\tif ( clampToLine ) {\n\n\t\t\t\tt = _Math.clamp( t, 0, 1 );\n\n\t\t\t}\n\n\t\t\treturn t;\n\n\t\t};\n\n\t}(),\n\n\tclosestPointToPoint: function ( point, clampToLine, target ) {\n\n\t\tvar t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t},\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Triangle( a, b, c ) {\n\n\tthis.a = ( a !== undefined ) ? a : new Vector3();\n\tthis.b = ( b !== undefined ) ? b : new Vector3();\n\tthis.c = ( c !== undefined ) ? c : new Vector3();\n\n}\n\nObject.assign( Triangle, {\n\n\tgetNormal: function () {\n\n\t\tvar v0 = new Vector3();\n\n\t\treturn function getNormal( a, b, c, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getNormal() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\ttarget.subVectors( c, b );\n\t\t\tv0.subVectors( a, b );\n\t\t\ttarget.cross( v0 );\n\n\t\t\tvar targetLengthSq = target.lengthSq();\n\t\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t\t}\n\n\t\t\treturn target.set( 0, 0, 0 );\n\n\t\t};\n\n\t}(),\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tgetBarycoord: function () {\n\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\treturn function getBarycoord( point, a, b, c, target ) {\n\n\t\t\tv0.subVectors( c, a );\n\t\t\tv1.subVectors( b, a );\n\t\t\tv2.subVectors( point, a );\n\n\t\t\tvar dot00 = v0.dot( v0 );\n\t\t\tvar dot01 = v0.dot( v1 );\n\t\t\tvar dot02 = v0.dot( v2 );\n\t\t\tvar dot11 = v1.dot( v1 );\n\t\t\tvar dot12 = v1.dot( v2 );\n\n\t\t\tvar denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getBarycoord() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\t// collinear or singular triangle\n\t\t\tif ( denom === 0 ) {\n\n\t\t\t\t// arbitrary location outside of triangle?\n\t\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t\t}\n\n\t\t\tvar invDenom = 1 / denom;\n\t\t\tvar u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\t\tvar v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t\t// barycentric coordinates must always sum to 1\n\t\t\treturn target.set( 1 - u - v, v, u );\n\n\t\t};\n\n\t}(),\n\n\tcontainsPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function containsPoint( point, a, b, c ) {\n\n\t\t\tTriangle.getBarycoord( point, a, b, c, v1 );\n\n\t\t\treturn ( v1.x >= 0 ) && ( v1.y >= 0 ) && ( ( v1.x + v1.y ) <= 1 );\n\n\t\t};\n\n\t}()\n\n} );\n\nObject.assign( Triangle.prototype, {\n\n\tset: function ( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPointsAndIndices: function ( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t},\n\n\tgetArea: function () {\n\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\n\t\treturn function getArea() {\n\n\t\t\tv0.subVectors( this.c, this.b );\n\t\t\tv1.subVectors( this.a, this.b );\n\n\t\t\treturn v0.cross( v1 ).length() * 0.5;\n\n\t\t};\n\n\t}(),\n\n\tgetMidpoint: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getMidpoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t},\n\n\tgetNormal: function ( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t},\n\n\tgetPlane: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getPlane() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t},\n\n\tgetBarycoord: function ( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t},\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t},\n\n\tclosestPointToPoint: function () {\n\n\t\tvar plane = new Plane();\n\t\tvar edgeList = [ new Line3(), new Line3(), new Line3() ];\n\t\tvar projectedPoint = new Vector3();\n\t\tvar closestPoint = new Vector3();\n\n\t\treturn function closestPointToPoint( point, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tvar minDistance = Infinity;\n\n\t\t\t// project the point onto the plane of the triangle\n\n\t\t\tplane.setFromCoplanarPoints( this.a, this.b, this.c );\n\t\t\tplane.projectPoint( point, projectedPoint );\n\n\t\t\t// check if the projection lies within the triangle\n\n\t\t\tif ( this.containsPoint( projectedPoint ) === true ) {\n\n\t\t\t\t// if so, this is the closest point\n\n\t\t\t\ttarget.copy( projectedPoint );\n\n\t\t\t} else {\n\n\t\t\t\t// if not, the point falls outside the triangle. the target is the closest point to the triangle's edges or vertices\n\n\t\t\t\tedgeList[ 0 ].set( this.a, this.b );\n\t\t\t\tedgeList[ 1 ].set( this.b, this.c );\n\t\t\t\tedgeList[ 2 ].set( this.c, this.a );\n\n\t\t\t\tfor ( var i = 0; i < edgeList.length; i ++ ) {\n\n\t\t\t\t\tedgeList[ i ].closestPointToPoint( projectedPoint, true, closestPoint );\n\n\t\t\t\t\tvar distance = projectedPoint.distanceToSquared( closestPoint );\n\n\t\t\t\t\tif ( distance < minDistance ) {\n\n\t\t\t\t\t\tminDistance = distance;\n\n\t\t\t\t\t\ttarget.copy( closestPoint );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tequals: function ( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author mikael emtinger / http://gomo.se/\n * @author jonobr1 / http://jonobr1.com/\n */\n\nfunction Mesh( geometry, material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Mesh';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new MeshBasicMaterial( { color: Math.random() * 0xffffff } );\n\n\tthis.drawMode = TrianglesDrawMode;\n\n\tthis.updateMorphTargets();\n\n}\n\nMesh.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Mesh,\n\n\tisMesh: true,\n\n\tsetDrawMode: function ( value ) {\n\n\t\tthis.drawMode = value;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.drawMode = source.drawMode;\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t\tvar geometry = this.geometry;\n\t\tvar m, ml, name;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tvar morphAttributes = geometry.morphAttributes;\n\t\t\tvar keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tvar morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tname = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tvar morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( m = 0, ml = morphTargets.length; m < ml; m ++ ) {\n\n\t\t\t\t\tname = morphTargets[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\traycast: ( function () {\n\n\t\tvar inverseMatrix = new Matrix4();\n\t\tvar ray = new Ray();\n\t\tvar sphere = new Sphere();\n\n\t\tvar vA = new Vector3();\n\t\tvar vB = new Vector3();\n\t\tvar vC = new Vector3();\n\n\t\tvar tempA = new Vector3();\n\t\tvar tempB = new Vector3();\n\t\tvar tempC = new Vector3();\n\n\t\tvar uvA = new Vector2();\n\t\tvar uvB = new Vector2();\n\t\tvar uvC = new Vector2();\n\n\t\tvar barycoord = new Vector3();\n\n\t\tvar intersectionPoint = new Vector3();\n\t\tvar intersectionPointWorld = new Vector3();\n\n\t\tfunction uvIntersection( point, p1, p2, p3, uv1, uv2, uv3 ) {\n\n\t\t\tTriangle.getBarycoord( point, p1, p2, p3, barycoord );\n\n\t\t\tuv1.multiplyScalar( barycoord.x );\n\t\t\tuv2.multiplyScalar( barycoord.y );\n\t\t\tuv3.multiplyScalar( barycoord.z );\n\n\t\t\tuv1.add( uv2 ).add( uv3 );\n\n\t\t\treturn uv1.clone();\n\n\t\t}\n\n\t\tfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\t\t\tvar intersect;\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t\t\t} else {\n\n\t\t\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point );\n\n\t\t\t}\n\n\t\t\tif ( intersect === null ) return null;\n\n\t\t\tintersectionPointWorld.copy( point );\n\t\t\tintersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectionPointWorld );\n\n\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\t\t\treturn {\n\t\t\t\tdistance: distance,\n\t\t\t\tpoint: intersectionPointWorld.clone(),\n\t\t\t\tobject: object\n\t\t\t};\n\n\t\t}\n\n\t\tfunction checkBufferGeometryIntersection( object, material, raycaster, ray, position, uv, a, b, c ) {\n\n\t\t\tvA.fromBufferAttribute( position, a );\n\t\t\tvB.fromBufferAttribute( position, b );\n\t\t\tvC.fromBufferAttribute( position, c );\n\n\t\t\tvar intersection = checkIntersection( object, material, raycaster, ray, vA, vB, vC, intersectionPoint );\n\n\t\t\tif ( intersection ) {\n\n\t\t\t\tif ( uv ) {\n\n\t\t\t\t\tuvA.fromBufferAttribute( uv, a );\n\t\t\t\t\tuvB.fromBufferAttribute( uv, b );\n\t\t\t\t\tuvC.fromBufferAttribute( uv, c );\n\n\t\t\t\t\tintersection.uv = uvIntersection( intersectionPoint, vA, vB, vC, uvA, uvB, uvC );\n\n\t\t\t\t}\n\n\t\t\t\tvar face = new Face3( a, b, c );\n\t\t\t\tTriangle.getNormal( vA, vB, vC, face.normal );\n\n\t\t\t\tintersection.face = face;\n\n\t\t\t}\n\n\t\t\treturn intersection;\n\n\t\t}\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar material = this.material;\n\t\t\tvar matrixWorld = this.matrixWorld;\n\n\t\t\tif ( material === undefined ) return;\n\n\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\tsphere.applyMatrix4( matrixWorld );\n\n\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t//\n\n\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\t// Check boundingBox before continuing\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tif ( ray.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t\t}\n\n\t\t\tvar intersection;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tvar a, b, c;\n\t\t\t\tvar index = geometry.index;\n\t\t\t\tvar position = geometry.attributes.position;\n\t\t\t\tvar uv = geometry.attributes.uv;\n\t\t\t\tvar groups = geometry.groups;\n\t\t\t\tvar drawRange = geometry.drawRange;\n\t\t\t\tvar i, j, il, jl;\n\t\t\t\tvar group, groupMaterial;\n\t\t\t\tvar start, end;\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\t// indexed buffer geometry\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tgroup = groups[ i ];\n\t\t\t\t\t\t\tgroupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\t\ta = index.getX( i );\n\t\t\t\t\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\t\t\t\t\tc = index.getX( i + 2 );\n\n\t\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, ray, position, uv, a, b, c );\n\n\t\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\t\t\t\tend = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\t\ta = index.getX( i );\n\t\t\t\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\t\t\t\tc = index.getX( i + 2 );\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, ray, position, uv, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( position !== undefined ) {\n\n\t\t\t\t\t// non-indexed buffer geometry\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tgroup = groups[ i ];\n\t\t\t\t\t\t\tgroupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\t\ta = j;\n\t\t\t\t\t\t\t\tb = j + 1;\n\t\t\t\t\t\t\t\tc = j + 2;\n\n\t\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, ray, position, uv, a, b, c );\n\n\t\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\t\t\t\tend = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\t\ta = i;\n\t\t\t\t\t\t\tb = i + 1;\n\t\t\t\t\t\t\tc = i + 2;\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, ray, position, uv, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar fvA, fvB, fvC;\n\t\t\t\tvar isMultiMaterial = Array.isArray( material );\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar faces = geometry.faces;\n\t\t\t\tvar uvs;\n\n\t\t\t\tvar faceVertexUvs = geometry.faceVertexUvs[ 0 ];\n\t\t\t\tif ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs;\n\n\t\t\t\tfor ( var f = 0, fl = faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tvar face = faces[ f ];\n\t\t\t\t\tvar faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material;\n\n\t\t\t\t\tif ( faceMaterial === undefined ) continue;\n\n\t\t\t\t\tfvA = vertices[ face.a ];\n\t\t\t\t\tfvB = vertices[ face.b ];\n\t\t\t\t\tfvC = vertices[ face.c ];\n\n\t\t\t\t\tif ( faceMaterial.morphTargets === true ) {\n\n\t\t\t\t\t\tvar morphTargets = geometry.morphTargets;\n\t\t\t\t\t\tvar morphInfluences = this.morphTargetInfluences;\n\n\t\t\t\t\t\tvA.set( 0, 0, 0 );\n\t\t\t\t\t\tvB.set( 0, 0, 0 );\n\t\t\t\t\t\tvC.set( 0, 0, 0 );\n\n\t\t\t\t\t\tfor ( var t = 0, tl = morphTargets.length; t < tl; t ++ ) {\n\n\t\t\t\t\t\t\tvar influence = morphInfluences[ t ];\n\n\t\t\t\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t\t\t\tvar targets = morphTargets[ t ].vertices;\n\n\t\t\t\t\t\t\tvA.addScaledVector( tempA.subVectors( targets[ face.a ], fvA ), influence );\n\t\t\t\t\t\t\tvB.addScaledVector( tempB.subVectors( targets[ face.b ], fvB ), influence );\n\t\t\t\t\t\t\tvC.addScaledVector( tempC.subVectors( targets[ face.c ], fvC ), influence );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvA.add( fvA );\n\t\t\t\t\t\tvB.add( fvB );\n\t\t\t\t\t\tvC.add( fvC );\n\n\t\t\t\t\t\tfvA = vA;\n\t\t\t\t\t\tfvB = vB;\n\t\t\t\t\t\tfvC = vC;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tintersection = checkIntersection( this, faceMaterial, raycaster, ray, fvA, fvB, fvC, intersectionPoint );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tif ( uvs && uvs[ f ] ) {\n\n\t\t\t\t\t\t\tvar uvs_f = uvs[ f ];\n\t\t\t\t\t\t\tuvA.copy( uvs_f[ 0 ] );\n\t\t\t\t\t\t\tuvB.copy( uvs_f[ 1 ] );\n\t\t\t\t\t\t\tuvC.copy( uvs_f[ 2 ] );\n\n\t\t\t\t\t\t\tintersection.uv = uvIntersection( intersectionPoint, fvA, fvB, fvC, uvA, uvB, uvC );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tintersection.face = face;\n\t\t\t\t\t\tintersection.faceIndex = f;\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() ),\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLBackground( renderer, state, objects, premultipliedAlpha ) {\n\n\tvar clearColor = new Color( 0x000000 );\n\tvar clearAlpha = 0;\n\n\tvar planeCamera, planeMesh;\n\tvar boxMesh;\n\n\tfunction render( renderList, scene, camera, forceClear ) {\n\n\t\tvar background = scene.background;\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\tif ( background && background.isCubeTexture ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxBufferGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tuniforms: ShaderLib.cube.uniforms,\n\t\t\t\t\t\tvertexShader: ShaderLib.cube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.cube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: true,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.removeAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.removeAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.tCube.value = background;\n\n\t\t\trenderList.push( boxMesh, boxMesh.geometry, boxMesh.material, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeCamera === undefined ) {\n\n\t\t\t\tplaneCamera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneBufferGeometry( 2, 2 ),\n\t\t\t\t\tnew MeshBasicMaterial( { depthTest: false, depthWrite: false, fog: false } )\n\t\t\t\t);\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.map = background;\n\n\t\t\t// TODO Push this to renderList\n\n\t\t\trenderer.renderBufferDirect( planeCamera, null, planeMesh.geometry, planeMesh.material, planeMesh, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tstate.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha );\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha !== undefined ? alpha : 1;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLBufferRenderer( gl, extensions, info ) {\n\n\tvar mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode );\n\n\t}\n\n\tfunction renderInstances( geometry, start, count ) {\n\n\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\textension.drawArraysInstancedANGLE( mode, start, count, geometry.maxInstancedCount );\n\n\t\tinfo.update( count, mode, geometry.maxInstancedCount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n\tvar maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tvar extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 &&\n\t\t\t gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 &&\n\t\t\t gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\tvar precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tvar maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tvar logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tvar maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );\n\tvar maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );\n\tvar maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );\n\tvar maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );\n\n\tvar maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\tvar maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );\n\tvar maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );\n\tvar maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );\n\n\tvar vertexTextures = maxVertexTextures > 0;\n\tvar floatFragmentTextures = !! extensions.get( 'OES_texture_float' );\n\tvar floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\treturn {\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\t\tfloatFragmentTextures: floatFragmentTextures,\n\t\tfloatVertexTextures: floatVertexTextures\n\n\t};\n\n}\n\n/**\n * @author tschw\n */\n\nfunction WebGLClipping() {\n\n\tvar scope = this,\n\n\t\tglobalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false,\n\n\t\tplane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping, camera ) {\n\n\t\tvar enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\t\tresetGlobalState();\n\n\t};\n\n\tthis.setState = function ( planes, clipIntersection, clipShadows, camera, cache, fromCache ) {\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tvar nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4,\n\n\t\t\t\tdstArray = cache.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, fromCache );\n\n\t\t\tfor ( var i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tcache.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tvar nPlanes = planes !== null ? planes.length : 0,\n\t\t\tdstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tvar flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLExtensions( gl ) {\n\n\tvar extensions = {};\n\n\treturn {\n\n\t\tget: function ( name ) {\n\n\t\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\t\treturn extensions[ name ];\n\n\t\t\t}\n\n\t\t\tvar extension;\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\textension = gl.getExtension( name );\n\n\t\t\t}\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\textensions[ name ] = extension;\n\n\t\t\treturn extension;\n\n\t\t}\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLGeometries( gl, attributes, info ) {\n\n\tvar geometries = {};\n\tvar wireframeAttributes = {};\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tvar geometry = event.target;\n\t\tvar buffergeometry = geometries[ geometry.id ];\n\n\t\tif ( buffergeometry.index !== null ) {\n\n\t\t\tattributes.remove( buffergeometry.index );\n\n\t\t}\n\n\t\tfor ( var name in buffergeometry.attributes ) {\n\n\t\t\tattributes.remove( buffergeometry.attributes[ name ] );\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tdelete geometries[ geometry.id ];\n\n\t\t// TODO Remove duplicate code\n\n\t\tvar attribute = wireframeAttributes[ geometry.id ];\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\tdelete wireframeAttributes[ geometry.id ];\n\n\t\t}\n\n\t\tattribute = wireframeAttributes[ buffergeometry.id ];\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\tdelete wireframeAttributes[ buffergeometry.id ];\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tvar buffergeometry = geometries[ geometry.id ];\n\n\t\tif ( buffergeometry ) return buffergeometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tbuffergeometry = geometry;\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tif ( geometry._bufferGeometry === undefined ) {\n\n\t\t\t\tgeometry._bufferGeometry = new BufferGeometry().setFromObject( object );\n\n\t\t\t}\n\n\t\t\tbuffergeometry = geometry._bufferGeometry;\n\n\t\t}\n\n\t\tgeometries[ geometry.id ] = buffergeometry;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tvar index = geometry.index;\n\t\tvar geometryAttributes = geometry.attributes;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\t}\n\n\t\tfor ( var name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tvar morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( var name in morphAttributes ) {\n\n\t\t\tvar array = morphAttributes[ name ];\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], gl.ARRAY_BUFFER );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tvar attribute = wireframeAttributes[ geometry.id ];\n\n\t\tif ( attribute ) return attribute;\n\n\t\tvar indices = [];\n\n\t\tvar geometryIndex = geometry.index;\n\t\tvar geometryAttributes = geometry.attributes;\n\n\t\t// console.time( 'wireframe' );\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tvar array = geometryIndex.array;\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tvar a = array[ i + 0 ];\n\t\t\t\tvar b = array[ i + 1 ];\n\t\t\t\tvar c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tvar array = geometryAttributes.position.array;\n\n\t\t\tfor ( var i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tvar a = i + 0;\n\t\t\t\tvar b = i + 1;\n\t\t\t\tvar c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// console.timeEnd( 'wireframe' );\n\n\t\tattribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\n\t\tattributes.update( attribute, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\twireframeAttributes[ geometry.id ] = attribute;\n\n\t\treturn attribute;\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info ) {\n\n\tvar mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tvar type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode );\n\n\t}\n\n\tfunction renderInstances( geometry, start, count ) {\n\n\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tconsole.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\textension.drawElementsInstancedANGLE( mode, count, type, start * bytesPerElement, geometry.maxInstancedCount );\n\n\t\tinfo.update( count, mode, geometry.maxInstancedCount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction WebGLInfo( gl ) {\n\n\tvar memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tvar render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\tinstanceCount = instanceCount || 1;\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase gl.TRIANGLES:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.TRIANGLE_STRIP:\n\t\t\tcase gl.TRIANGLE_FAN:\n\t\t\t\trender.triangles += instanceCount * ( count - 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINES:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_STRIP:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_LOOP:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase gl.POINTS:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.frame ++;\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction absNumericalSort( a, b ) {\n\n\treturn Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );\n\n}\n\nfunction WebGLMorphtargets( gl ) {\n\n\tvar influencesList = {};\n\tvar morphInfluences = new Float32Array( 8 );\n\n\tfunction update( object, geometry, material, program ) {\n\n\t\tvar objectInfluences = object.morphTargetInfluences;\n\n\t\tvar length = objectInfluences.length;\n\n\t\tvar influences = influencesList[ geometry.id ];\n\n\t\tif ( influences === undefined ) {\n\n\t\t\t// initialise list\n\n\t\t\tinfluences = [];\n\n\t\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\t\tinfluences[ i ] = [ i, 0 ];\n\n\t\t\t}\n\n\t\t\tinfluencesList[ geometry.id ] = influences;\n\n\t\t}\n\n\t\tvar morphTargets = material.morphTargets && geometry.morphAttributes.position;\n\t\tvar morphNormals = material.morphNormals && geometry.morphAttributes.normal;\n\n\t\t// Remove current morphAttributes\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tvar influence = influences[ i ];\n\n\t\t\tif ( influence[ 1 ] !== 0 ) {\n\n\t\t\t\tif ( morphTargets ) geometry.removeAttribute( 'morphTarget' + i );\n\t\t\t\tif ( morphNormals ) geometry.removeAttribute( 'morphNormal' + i );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Collect influences\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tvar influence = influences[ i ];\n\n\t\t\tinfluence[ 0 ] = i;\n\t\t\tinfluence[ 1 ] = objectInfluences[ i ];\n\n\t\t}\n\n\t\tinfluences.sort( absNumericalSort );\n\n\t\t// Add morphAttributes\n\n\t\tfor ( var i = 0; i < 8; i ++ ) {\n\n\t\t\tvar influence = influences[ i ];\n\n\t\t\tif ( influence ) {\n\n\t\t\t\tvar index = influence[ 0 ];\n\t\t\t\tvar value = influence[ 1 ];\n\n\t\t\t\tif ( value ) {\n\n\t\t\t\t\tif ( morphTargets ) geometry.addAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\t\t\t\t\tif ( morphNormals ) geometry.addAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t}\n\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLObjects( geometries, info ) {\n\n\tvar updateList = {};\n\n\tfunction update( object ) {\n\n\t\tvar frame = info.render.frame;\n\n\t\tvar geometry = object.geometry;\n\t\tvar buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateList[ buffergeometry.id ] !== frame ) {\n\n\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\tbuffergeometry.updateFromObject( object );\n\n\t\t\t}\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateList[ buffergeometry.id ] = frame;\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateList = {};\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\timages = images !== undefined ? images : [];\n\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\n\tTexture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.flipY = false;\n\n}\n\nCubeTexture.prototype = Object.create( Texture.prototype );\nCubeTexture.prototype.constructor = CubeTexture;\n\nCubeTexture.prototype.isCubeTexture = true;\n\nObject.defineProperty( CubeTexture.prototype, 'images', {\n\n\tget: function () {\n\n\t\treturn this.image;\n\n\t},\n\n\tset: function ( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n} );\n\n/**\n * @author tschw\n * @author Mugen87 / https://github.com/Mugen87\n * @author mrdoob / http://mrdoob.com/\n *\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program, renderer )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [renderer] )\n *\n * \t\tuploads a uniform value(s)\n * \tthe 'renderer' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (renderer factorizations):\n *\n * .upload( gl, seq, values, renderer )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (renderer factorizations):\n *\n * .setValue( gl, name, value )\n *\n * \t\tsets uniform with name 'name' to 'value'\n *\n * .set( gl, obj, prop )\n *\n * \t\tsets uniform from object and property with same name than uniform\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\nvar emptyTexture = new Texture();\nvar emptyCubeTexture = new CubeTexture();\n\n// --- Base for inner nodes (including the root) ---\n\nfunction UniformContainer() {\n\n\tthis.seq = [];\n\tthis.map = {};\n\n}\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nvar arrayCacheF32 = [];\nvar arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nvar mat4array = new Float32Array( 16 );\nvar mat3array = new Float32Array( 9 );\nvar mat2array = new Float32Array( 4 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tvar firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tvar n = nBlocks * blockSize,\n\t\tr = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( var i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\nfunction arraysEqual( a, b ) {\n\n\tif ( a.length !== b.length ) return false;\n\n\tfor ( var i = 0, l = a.length; i < l; i ++ ) {\n\n\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction copyArray( a, b ) {\n\n\tfor ( var i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ i ] = b[ i ];\n\n\t}\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( renderer, n ) {\n\n\tvar r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( var i = 0; i !== n; ++ i )\n\t\tr[ i ] = renderer.allocTextureUnit();\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValue1f( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1f( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\nfunction setValue1i( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1i( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValue2fv( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValue3fv( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\tcache[ 0 ] = v.r;\n\t\t\tcache[ 1 ] = v.g;\n\t\t\tcache[ 2 ] = v.b;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValue4fv( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single matrix (from flat array or MatrixN)\n\nfunction setValue2fm( gl, v ) {\n\n\tvar cache = this.cache;\n\tvar elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat2array.set( elements );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValue3fm( gl, v ) {\n\n\tvar cache = this.cache;\n\tvar elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat3array.set( elements );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValue4fm( gl, v ) {\n\n\tvar cache = this.cache;\n\tvar elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat4array.set( elements );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, renderer ) {\n\n\tvar cache = this.cache;\n\tvar unit = renderer.allocTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\trenderer.setTexture2D( v || emptyTexture, unit );\n\n}\n\nfunction setValueT6( gl, v, renderer ) {\n\n\tvar cache = this.cache;\n\tvar unit = renderer.allocTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\trenderer.setTextureCube( v || emptyCubeTexture, unit );\n\n}\n\n// Integer / Boolean vectors or arrays thereof (always flat arrays)\n\nfunction setValue2iv( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform2iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValue3iv( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform3iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValue4iv( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform4iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValue1f; // FLOAT\n\t\tcase 0x8b50: return setValue2fv; // _VEC2\n\t\tcase 0x8b51: return setValue3fv; // _VEC3\n\t\tcase 0x8b52: return setValue4fv; // _VEC4\n\n\t\tcase 0x8b5a: return setValue2fm; // _MAT2\n\t\tcase 0x8b5b: return setValue3fm; // _MAT3\n\t\tcase 0x8b5c: return setValue4fm; // _MAT4\n\n\t\tcase 0x8b5e: case 0x8d66: return setValueT1; // SAMPLER_2D, SAMPLER_EXTERNAL_OES\n\t\tcase 0x8b60: return setValueT6; // SAMPLER_CUBE\n\n\t\tcase 0x1404: case 0x8b56: return setValue1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValue2iv; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValue3iv; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValue4iv; // _VEC4\n\n\t}\n\n}\n\n// Array of scalars\n\nfunction setValue1fv( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform1fv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\nfunction setValue1iv( gl, v ) {\n\n\tvar cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform1iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\n// Array of vectors (flat or from THREE classes)\n\nfunction setValueV2a( gl, v ) {\n\n\tvar cache = this.cache;\n\tvar data = flatten( v, this.size, 2 );\n\n\tif ( arraysEqual( cache, data ) ) return;\n\n\tgl.uniform2fv( this.addr, data );\n\n\tthis.updateCache( data );\n\n}\n\nfunction setValueV3a( gl, v ) {\n\n\tvar cache = this.cache;\n\tvar data = flatten( v, this.size, 3 );\n\n\tif ( arraysEqual( cache, data ) ) return;\n\n\tgl.uniform3fv( this.addr, data );\n\n\tthis.updateCache( data );\n\n}\n\nfunction setValueV4a( gl, v ) {\n\n\tvar cache = this.cache;\n\tvar data = flatten( v, this.size, 4 );\n\n\tif ( arraysEqual( cache, data ) ) return;\n\n\tgl.uniform4fv( this.addr, data );\n\n\tthis.updateCache( data );\n\n}\n\n// Array of matrices (flat or from THREE clases)\n\nfunction setValueM2a( gl, v ) {\n\n\tvar cache = this.cache;\n\tvar data = flatten( v, this.size, 4 );\n\n\tif ( arraysEqual( cache, data ) ) return;\n\n\tgl.uniformMatrix2fv( this.addr, false, data );\n\n\tthis.updateCache( data );\n\n}\n\nfunction setValueM3a( gl, v ) {\n\n\tvar cache = this.cache;\n\tvar data = flatten( v, this.size, 9 );\n\n\tif ( arraysEqual( cache, data ) ) return;\n\n\tgl.uniformMatrix3fv( this.addr, false, data );\n\n\tthis.updateCache( data );\n\n}\n\nfunction setValueM4a( gl, v ) {\n\n\tvar cache = this.cache;\n\tvar data = flatten( v, this.size, 16 );\n\n\tif ( arraysEqual( cache, data ) ) return;\n\n\tgl.uniformMatrix4fv( this.addr, false, data );\n\n\tthis.updateCache( data );\n\n}\n\n// Array of textures (2D / Cube)\n\nfunction setValueT1a( gl, v, renderer ) {\n\n\tvar cache = this.cache;\n\tvar n = v.length;\n\n\tvar units = allocTexUnits( renderer, n );\n\n\tif ( arraysEqual( cache, units ) === false ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( var i = 0; i !== n; ++ i ) {\n\n\t\trenderer.setTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6a( gl, v, renderer ) {\n\n\tvar cache = this.cache;\n\tvar n = v.length;\n\n\tvar units = allocTexUnits( renderer, n );\n\n\tif ( arraysEqual( cache, units ) === false ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( var i = 0; i !== n; ++ i ) {\n\n\t\trenderer.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValue1fv; // FLOAT\n\t\tcase 0x8b50: return setValueV2a; // _VEC2\n\t\tcase 0x8b51: return setValueV3a; // _VEC3\n\t\tcase 0x8b52: return setValueV4a; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2a; // _MAT2\n\t\tcase 0x8b5b: return setValueM3a; // _MAT3\n\t\tcase 0x8b5c: return setValueM4a; // _MAT4\n\n\t\tcase 0x8b5e: return setValueT1a; // SAMPLER_2D\n\t\tcase 0x8b60: return setValueT6a; // SAMPLER_CUBE\n\n\t\tcase 0x1404: case 0x8b56: return setValue1iv; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValue2iv; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValue3iv; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValue4iv; // _VEC4\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nfunction SingleUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.cache = [];\n\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nfunction PureArrayUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.cache = [];\n\tthis.size = activeInfo.size;\n\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nPureArrayUniform.prototype.updateCache = function ( data ) {\n\n\tvar cache = this.cache;\n\n\tif ( data instanceof Float32Array && cache.length !== data.length ) {\n\n\t\tthis.cache = new Float32Array( data.length );\n\n\t}\n\n\tcopyArray( cache, data );\n\n};\n\nfunction StructuredUniform( id ) {\n\n\tthis.id = id;\n\n\tUniformContainer.call( this ); // mix-in\n\n}\n\nStructuredUniform.prototype.setValue = function ( gl, value ) {\n\n\t// Note: Don't need an extra 'renderer' parameter, since samplers\n\t// are not allowed in structured uniforms.\n\n\tvar seq = this.seq;\n\n\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tvar u = seq[ i ];\n\t\tu.setValue( gl, value[ u.id ] );\n\n\t}\n\n};\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nvar RePathPart = /([\\w\\d_]+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n// - followed by an optional right bracket (found when array index)\n// - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tvar path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\twhile ( true ) {\n\n\t\tvar match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex,\n\n\t\t\tid = match[ 1 ],\n\t\t\tidIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tvar map = container.map, next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nfunction WebGLUniforms( gl, program, renderer ) {\n\n\tUniformContainer.call( this );\n\n\tthis.renderer = renderer;\n\n\tvar n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS );\n\n\tfor ( var i = 0; i < n; ++ i ) {\n\n\t\tvar info = gl.getActiveUniform( program, i ),\n\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\tparseUniform( info, addr, this );\n\n\t}\n\n}\n\nWebGLUniforms.prototype.setValue = function ( gl, name, value ) {\n\n\tvar u = this.map[ name ];\n\n\tif ( u !== undefined ) u.setValue( gl, value, this.renderer );\n\n};\n\nWebGLUniforms.prototype.setOptional = function ( gl, object, name ) {\n\n\tvar v = object[ name ];\n\n\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n};\n\n\n// Static interface\n\nWebGLUniforms.upload = function ( gl, seq, values, renderer ) {\n\n\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tvar u = seq[ i ],\n\t\t\tv = values[ u.id ];\n\n\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\tu.setValue( gl, v.value, renderer );\n\n\t\t}\n\n\t}\n\n};\n\nWebGLUniforms.seqWithValue = function ( seq, values ) {\n\n\tvar r = [];\n\n\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tvar u = seq[ i ];\n\t\tif ( u.id in values ) r.push( u );\n\n\t}\n\n\treturn r;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction addLineNumbers( string ) {\n\n\tvar lines = string.split( '\\n' );\n\n\tfor ( var i = 0; i < lines.length; i ++ ) {\n\n\t\tlines[ i ] = ( i + 1 ) + ': ' + lines[ i ];\n\n\t}\n\n\treturn lines.join( '\\n' );\n\n}\n\nfunction WebGLShader( gl, type, string ) {\n\n\tvar shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\tif ( gl.getShaderParameter( shader, gl.COMPILE_STATUS ) === false ) {\n\n\t\tconsole.error( 'THREE.WebGLShader: Shader couldn\\'t compile.' );\n\n\t}\n\n\tif ( gl.getShaderInfoLog( shader ) !== '' ) {\n\n\t\tconsole.warn( 'THREE.WebGLShader: gl.getShaderInfoLog()', type === gl.VERTEX_SHADER ? 'vertex' : 'fragment', gl.getShaderInfoLog( shader ), addLineNumbers( string ) );\n\n\t}\n\n\t// --enable-privileged-webgl-extension\n\t// console.log( type, gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\treturn shader;\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar programIdCount = 0;\n\nfunction getEncodingComponents( encoding ) {\n\n\tswitch ( encoding ) {\n\n\t\tcase LinearEncoding:\n\t\t\treturn [ 'Linear', '( value )' ];\n\t\tcase sRGBEncoding:\n\t\t\treturn [ 'sRGB', '( value )' ];\n\t\tcase RGBEEncoding:\n\t\t\treturn [ 'RGBE', '( value )' ];\n\t\tcase RGBM7Encoding:\n\t\t\treturn [ 'RGBM', '( value, 7.0 )' ];\n\t\tcase RGBM16Encoding:\n\t\t\treturn [ 'RGBM', '( value, 16.0 )' ];\n\t\tcase RGBDEncoding:\n\t\t\treturn [ 'RGBD', '( value, 256.0 )' ];\n\t\tcase GammaEncoding:\n\t\t\treturn [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ];\n\t\tdefault:\n\t\t\tthrow new Error( 'unsupported encoding: ' + encoding );\n\n\t}\n\n}\n\nfunction getTexelDecodingFunction( functionName, encoding ) {\n\n\tvar components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }';\n\n}\n\nfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\tvar components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tvar toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase Uncharted2ToneMapping:\n\t\t\ttoneMappingName = 'Uncharted2';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'unsupported toneMapping: ' + toneMapping );\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nfunction generateExtensions( extensions, parameters, rendererExtensions ) {\n\n\textensions = extensions || {};\n\n\tvar chunks = [\n\t\t( extensions.derivatives || parameters.envMapCubeUV || parameters.bumpMap || ( parameters.normalMap && ! parameters.objectSpaceNormalMap ) || parameters.flatShading ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t( extensions.fragDepth || parameters.logarithmicDepthBuffer ) && rendererExtensions.get( 'EXT_frag_depth' ) ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t( extensions.drawBuffers ) && rendererExtensions.get( 'WEBGL_draw_buffers' ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t( extensions.shaderTextureLOD || parameters.envMap ) && rendererExtensions.get( 'EXT_shader_texture_lod' ) ? '#extension GL_EXT_shader_texture_lod : enable' : ''\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tvar chunks = [];\n\n\tfor ( var name in defines ) {\n\n\t\tvar value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tvar attributes = {};\n\n\tvar n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES );\n\n\tfor ( var i = 0; i < n; i ++ ) {\n\n\t\tvar info = gl.getActiveAttrib( program, i );\n\t\tvar name = info.name;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = gl.getAttribLocation( program, name );\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\nfunction parseIncludes( string ) {\n\n\tvar pattern = /^[ \\t]*#include +<([\\w\\d.]+)>/gm;\n\n\tfunction replace( match, include ) {\n\n\t\tvar replace = ShaderChunk[ include ];\n\n\t\tif ( replace === undefined ) {\n\n\t\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t\t}\n\n\t\treturn parseIncludes( replace );\n\n\t}\n\n\treturn string.replace( pattern, replace );\n\n}\n\nfunction unrollLoops( string ) {\n\n\tvar pattern = /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g;\n\n\tfunction replace( match, start, end, snippet ) {\n\n\t\tvar unroll = '';\n\n\t\tfor ( var i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\t\tunroll += snippet.replace( /\\[ i \\]/g, '[ ' + i + ' ]' );\n\n\t\t}\n\n\t\treturn unroll;\n\n\t}\n\n\treturn string.replace( pattern, replace );\n\n}\n\nfunction WebGLProgram( renderer, extensions, code, material, shader, parameters ) {\n\n\tvar gl = renderer.context;\n\n\tvar defines = material.defines;\n\n\tvar vertexShader = shader.vertexShader;\n\tvar fragmentShader = shader.fragmentShader;\n\n\tvar shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t}\n\n\tvar envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\tvar envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\tvar envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( material.envMap.mapping ) {\n\n\t\t\tcase CubeReflectionMapping:\n\t\t\tcase CubeRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\tbreak;\n\n\t\t\tcase CubeUVReflectionMapping:\n\t\t\tcase CubeUVRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\tbreak;\n\n\t\t\tcase EquirectangularReflectionMapping:\n\t\t\tcase EquirectangularRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_EQUIREC';\n\t\t\t\tbreak;\n\n\t\t\tcase SphericalReflectionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_SPHERE';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tswitch ( material.envMap.mapping ) {\n\n\t\t\tcase CubeRefractionMapping:\n\t\t\tcase EquirectangularRefractionMapping:\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tswitch ( material.combine ) {\n\n\t\t\tcase MultiplyOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\tbreak;\n\n\t\t\tcase MixOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\tbreak;\n\n\t\t\tcase AddOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tvar gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;\n\n\t// console.log( 'building new program ' );\n\n\t//\n\n\tvar customExtensions = generateExtensions( material.extensions, parameters, extensions );\n\n\tvar customDefines = generateDefines( defines );\n\n\t//\n\n\tvar program = gl.createProgram();\n\n\tvar prefixVertex, prefixFragment;\n\n\tif ( material.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\t'precision ' + parameters.precision + ' float;',\n\t\t\t'precision ' + parameters.precision + ' int;',\n\n\t\t\t'#define SHADER_NAME ' + shader.name,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t'#define MAX_BONES ' + parameters.maxBones,\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\tparameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '',\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\t\t\tparameters.useVertexTexture ? '#define BONE_TEXTURE' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\tparameters.logarithmicDepthBuffer && extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_COLOR',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_MORPHTARGETS',\n\n\t\t\t'\tattribute vec3 morphTarget0;',\n\t\t\t'\tattribute vec3 morphTarget1;',\n\t\t\t'\tattribute vec3 morphTarget2;',\n\t\t\t'\tattribute vec3 morphTarget3;',\n\n\t\t\t'\t#ifdef USE_MORPHNORMALS',\n\n\t\t\t'\t\tattribute vec3 morphNormal0;',\n\t\t\t'\t\tattribute vec3 morphNormal1;',\n\t\t\t'\t\tattribute vec3 morphNormal2;',\n\t\t\t'\t\tattribute vec3 morphNormal3;',\n\n\t\t\t'\t#else',\n\n\t\t\t'\t\tattribute vec3 morphTarget4;',\n\t\t\t'\t\tattribute vec3 morphTarget5;',\n\t\t\t'\t\tattribute vec3 morphTarget6;',\n\t\t\t'\t\tattribute vec3 morphTarget7;',\n\n\t\t\t'\t#endif',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\n\t\t\t'precision ' + parameters.precision + ' float;',\n\t\t\t'precision ' + parameters.precision + ' int;',\n\n\t\t\t'#define SHADER_NAME ' + shader.name,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest + ( parameters.alphaTest % 1 ? '' : '.0' ) : '', // add '.0' if integer\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\tparameters.logarithmicDepthBuffer && extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\tparameters.envMap && extensions.get( 'EXT_shader_texture_lod' ) ? '#define TEXTURE_LOD_EXT' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\n\t\t\t( parameters.outputEncoding || parameters.mapEncoding || parameters.envMapEncoding || parameters.emissiveMapEncoding ) ? ShaderChunk[ 'encodings_pars_fragment' ] : '', // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tparameters.mapEncoding ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',\n\t\t\tparameters.envMapEncoding ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',\n\t\t\tparameters.emissiveMapEncoding ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',\n\t\t\tparameters.outputEncoding ? getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ) : '',\n\n\t\t\tparameters.depthPacking ? '#define DEPTH_PACKING ' + material.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = parseIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = parseIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tvar vertexGlsl = prefixVertex + vertexShader;\n\tvar fragmentGlsl = prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tvar glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );\n\tvar glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( material.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, material.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\tvar programLog = gl.getProgramInfoLog( program ).trim();\n\tvar vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\tvar fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\tvar runnable = true;\n\tvar haveDiagnostics = true;\n\n\t// console.log( '**VERTEX**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glVertexShader ) );\n\t// console.log( '**FRAGMENT**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glFragmentShader ) );\n\n\tif ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {\n\n\t\trunnable = false;\n\n\t\tconsole.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), 'gl.VALIDATE_STATUS', gl.getProgramParameter( program, gl.VALIDATE_STATUS ), 'gl.getProgramInfoLog', programLog, vertexLog, fragmentLog );\n\n\t} else if ( programLog !== '' ) {\n\n\t\tconsole.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog );\n\n\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\thaveDiagnostics = false;\n\n\t}\n\n\tif ( haveDiagnostics ) {\n\n\t\tthis.diagnostics = {\n\n\t\t\trunnable: runnable,\n\t\t\tmaterial: material,\n\n\t\t\tprogramLog: programLog,\n\n\t\t\tvertexShader: {\n\n\t\t\t\tlog: vertexLog,\n\t\t\t\tprefix: prefixVertex\n\n\t\t\t},\n\n\t\t\tfragmentShader: {\n\n\t\t\t\tlog: fragmentLog,\n\t\t\t\tprefix: prefixFragment\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t// clean up\n\n\tgl.deleteShader( glVertexShader );\n\tgl.deleteShader( glFragmentShader );\n\n\t// set up caching for uniform locations\n\n\tvar cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\tcachedUniforms = new WebGLUniforms( gl, program, renderer );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tvar cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t// DEPRECATED\n\n\tObject.defineProperties( this, {\n\n\t\tuniforms: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: .uniforms is now .getUniforms().' );\n\t\t\t\treturn this.getUniforms();\n\n\t\t\t}\n\t\t},\n\n\t\tattributes: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: .attributes is now .getAttributes().' );\n\t\t\t\treturn this.getAttributes();\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\n\t//\n\n\tthis.name = shader.name;\n\tthis.id = programIdCount ++;\n\tthis.code = code;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLPrograms( renderer, extensions, capabilities ) {\n\n\tvar programs = [];\n\n\tvar shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'phong',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow'\n\t};\n\n\tvar parameterNames = [\n\t\t\"precision\", \"supportsVertexTextures\", \"map\", \"mapEncoding\", \"envMap\", \"envMapMode\", \"envMapEncoding\",\n\t\t\"lightMap\", \"aoMap\", \"emissiveMap\", \"emissiveMapEncoding\", \"bumpMap\", \"normalMap\", \"objectSpaceNormalMap\", \"displacementMap\", \"specularMap\",\n\t\t\"roughnessMap\", \"metalnessMap\", \"gradientMap\",\n\t\t\"alphaMap\", \"combine\", \"vertexColors\", \"fog\", \"useFog\", \"fogExp\",\n\t\t\"flatShading\", \"sizeAttenuation\", \"logarithmicDepthBuffer\", \"skinning\",\n\t\t\"maxBones\", \"useVertexTexture\", \"morphTargets\", \"morphNormals\",\n\t\t\"maxMorphTargets\", \"maxMorphNormals\", \"premultipliedAlpha\",\n\t\t\"numDirLights\", \"numPointLights\", \"numSpotLights\", \"numHemiLights\", \"numRectAreaLights\",\n\t\t\"shadowMapEnabled\", \"shadowMapType\", \"toneMapping\", 'physicallyCorrectLights',\n\t\t\"alphaTest\", \"doubleSided\", \"flipSided\", \"numClippingPlanes\", \"numClipIntersection\", \"depthPacking\", \"dithering\"\n\t];\n\n\n\tfunction allocateBones( object ) {\n\n\t\tvar skeleton = object.skeleton;\n\t\tvar bones = skeleton.bones;\n\n\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\treturn 1024;\n\n\t\t} else {\n\n\t\t\t// default for when object is not specified\n\t\t\t// ( for example when prebuilding shader to be used with multiple objects )\n\t\t\t//\n\t\t\t// - leave some extra space for other uniforms\n\t\t\t// - limit here is ANGLE's 254 max uniform vectors\n\t\t\t// (up to 54 should be safe)\n\n\t\t\tvar nVertexUniforms = capabilities.maxVertexUniforms;\n\t\t\tvar nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 );\n\n\t\t\tvar maxBones = Math.min( nVertexMatrices, bones.length );\n\n\t\t\tif ( maxBones < bones.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' );\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\treturn maxBones;\n\n\t\t}\n\n\t}\n\n\tfunction getTextureEncodingFromMap( map, gammaOverrideLinear ) {\n\n\t\tvar encoding;\n\n\t\tif ( ! map ) {\n\n\t\t\tencoding = LinearEncoding;\n\n\t\t} else if ( map.isTexture ) {\n\n\t\t\tencoding = map.encoding;\n\n\t\t} else if ( map.isWebGLRenderTarget ) {\n\n\t\t\tconsole.warn( \"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\" );\n\t\t\tencoding = map.texture.encoding;\n\n\t\t}\n\n\t\t// add backwards compatibility for WebGLRenderer.gammaInput/gammaOutput parameter, should probably be removed at some point.\n\t\tif ( encoding === LinearEncoding && gammaOverrideLinear ) {\n\n\t\t\tencoding = GammaEncoding;\n\n\t\t}\n\n\t\treturn encoding;\n\n\t}\n\n\tthis.getParameters = function ( material, lights, shadows, fog, nClipPlanes, nClipIntersection, object ) {\n\n\t\tvar shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tvar maxBones = object.isSkinnedMesh ? allocateBones( object ) : 0;\n\t\tvar precision = capabilities.precision;\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar currentRenderTarget = renderer.getRenderTarget();\n\n\t\tvar parameters = {\n\n\t\t\tshaderID: shaderID,\n\n\t\t\tprecision: precision,\n\t\t\tsupportsVertexTextures: capabilities.vertexTextures,\n\t\t\toutputEncoding: getTextureEncodingFromMap( ( ! currentRenderTarget ) ? null : currentRenderTarget.texture, renderer.gammaOutput ),\n\t\t\tmap: !! material.map,\n\t\t\tmapEncoding: getTextureEncodingFromMap( material.map, renderer.gammaInput ),\n\t\t\tenvMap: !! material.envMap,\n\t\t\tenvMapMode: material.envMap && material.envMap.mapping,\n\t\t\tenvMapEncoding: getTextureEncodingFromMap( material.envMap, renderer.gammaInput ),\n\t\t\tenvMapCubeUV: ( !! material.envMap ) && ( ( material.envMap.mapping === CubeUVReflectionMapping ) || ( material.envMap.mapping === CubeUVRefractionMapping ) ),\n\t\t\tlightMap: !! material.lightMap,\n\t\t\taoMap: !! material.aoMap,\n\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\temissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap, renderer.gammaInput ),\n\t\t\tbumpMap: !! material.bumpMap,\n\t\t\tnormalMap: !! material.normalMap,\n\t\t\tobjectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap,\n\t\t\tdisplacementMap: !! material.displacementMap,\n\t\t\troughnessMap: !! material.roughnessMap,\n\t\t\tmetalnessMap: !! material.metalnessMap,\n\t\t\tspecularMap: !! material.specularMap,\n\t\t\talphaMap: !! material.alphaMap,\n\n\t\t\tgradientMap: !! material.gradientMap,\n\n\t\t\tcombine: material.combine,\n\n\t\t\tvertexColors: material.vertexColors,\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog,\n\t\t\tfogExp: ( fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: material.flatShading,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\tlogarithmicDepthBuffer: capabilities.logarithmicDepthBuffer,\n\n\t\t\tskinning: material.skinning && maxBones > 0,\n\t\t\tmaxBones: maxBones,\n\t\t\tuseVertexTexture: capabilities.floatVertexTextures,\n\n\t\t\tmorphTargets: material.morphTargets,\n\t\t\tmorphNormals: material.morphNormals,\n\t\t\tmaxMorphTargets: renderer.maxMorphTargets,\n\t\t\tmaxMorphNormals: renderer.maxMorphNormals,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumClippingPlanes: nClipPlanes,\n\t\t\tnumClipIntersection: nClipIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && object.receiveShadow && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: renderer.toneMapping,\n\t\t\tphysicallyCorrectLights: renderer.physicallyCorrectLights,\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\talphaTest: material.alphaTest,\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tdepthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false\n\n\t\t};\n\n\t\treturn parameters;\n\n\t};\n\n\tthis.getProgramCode = function ( material, parameters ) {\n\n\t\tvar array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( material.fragmentShader );\n\t\t\tarray.push( material.vertexShader );\n\n\t\t}\n\n\t\tif ( material.defines !== undefined ) {\n\n\t\t\tfor ( var name in material.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( material.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( var i = 0; i < parameterNames.length; i ++ ) {\n\n\t\t\tarray.push( parameters[ parameterNames[ i ] ] );\n\n\t\t}\n\n\t\tarray.push( material.onBeforeCompile.toString() );\n\n\t\tarray.push( renderer.gammaOutput );\n\n\t\treturn array.join();\n\n\t};\n\n\tthis.acquireProgram = function ( material, shader, parameters, code ) {\n\n\t\tvar program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( var p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tvar programInfo = programs[ p ];\n\n\t\t\tif ( programInfo.code === code ) {\n\n\t\t\t\tprogram = programInfo;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, extensions, code, material, shader, parameters );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t};\n\n\tthis.releaseProgram = function ( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tvar i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t};\n\n\t// Exposed for resource monitoring & error feedback via renderer.info:\n\tthis.programs = programs;\n\n}\n\n/**\n * @author fordacious / fordacious.github.io\n */\n\nfunction WebGLProperties() {\n\n\tvar properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tvar map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction painterSortStable( a, b ) {\n\n\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.program && b.program && a.program !== b.program ) {\n\n\t\treturn a.program.id - b.program.id;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction WebGLRenderList() {\n\n\tvar renderItems = [];\n\tvar renderItemsIndex = 0;\n\n\tvar opaque = [];\n\tvar transparent = [];\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction push( object, geometry, material, z, group ) {\n\n\t\tvar renderItem = renderItems[ renderItemsIndex ];\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tprogram: material.program,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.program = material.program;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\t\t( material.transparent === true ? transparent : opaque ).push( renderItem );\n\n\t\trenderItemsIndex ++;\n\n\t}\n\n\tfunction sort() {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( painterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( reversePainterSortStable );\n\n\t}\n\n\treturn {\n\t\topaque: opaque,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists() {\n\n\tvar lists = {};\n\n\tfunction get( scene, camera ) {\n\n\t\tvar hash = scene.id + ',' + camera.id;\n\t\tvar list = lists[ hash ];\n\n\t\tif ( list === undefined ) {\n\n\t\t\t// console.log( 'THREE.WebGLRenderLists:', hash );\n\n\t\t\tlist = new WebGLRenderList();\n\t\t\tlists[ hash ] = list;\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = {};\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction UniformsCache() {\n\n\tvar lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tvar uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\n\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0,\n\n\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0,\n\n\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nvar count = 0;\n\nfunction WebGLLights() {\n\n\tvar cache = new UniformsCache();\n\n\tvar state = {\n\n\t\tid: count ++,\n\n\t\thash: '',\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tdirectional: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotShadowMap: [],\n\t\tspotShadowMatrix: [],\n\t\trectArea: [],\n\t\tpoint: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: []\n\n\t};\n\n\tvar vector3 = new Vector3();\n\tvar matrix4 = new Matrix4();\n\tvar matrix42 = new Matrix4();\n\n\tfunction setup( lights, shadows, camera ) {\n\n\t\tvar r = 0, g = 0, b = 0;\n\n\t\tvar directionalLength = 0;\n\t\tvar pointLength = 0;\n\t\tvar spotLength = 0;\n\t\tvar rectAreaLength = 0;\n\t\tvar hemiLength = 0;\n\n\t\tvar viewMatrix = camera.matrixWorldInverse;\n\n\t\tfor ( var i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tvar light = lights[ i ];\n\n\t\t\tvar color = light.color;\n\t\t\tvar intensity = light.intensity;\n\t\t\tvar distance = light.distance;\n\n\t\t\tvar shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity;\n\t\t\t\tg += color.g * intensity;\n\t\t\t\tb += color.b * intensity;\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay;\n\n\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\t\t\t\tstate.spotShadowMatrix[ spotLength ] = light.shadow.matrix;\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\t// (a) intensity is the total visible light emitted\n\t\t\t\t//uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) );\n\n\t\t\t\t// (b) intensity is the brightness of the light\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\t// TODO (abelnation): RectAreaLight distance?\n\t\t\t\t// uniforms.distance = distance;\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay;\n\n\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tuniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tuniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t}\n\n\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\t\t\t\tuniforms.direction.normalize();\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tstate.directional.length = directionalLength;\n\t\tstate.spot.length = spotLength;\n\t\tstate.rectArea.length = rectAreaLength;\n\t\tstate.point.length = pointLength;\n\t\tstate.hemi.length = hemiLength;\n\n\t\tstate.hash = state.id + ',' + directionalLength + ',' + pointLength + ',' + spotLength + ',' + rectAreaLength + ',' + hemiLength + ',' + shadows.length;\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tstate: state\n\t};\n\n}\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction WebGLRenderState() {\n\n\tvar lights = new WebGLLights();\n\n\tvar lightsArray = [];\n\tvar shadowsArray = [];\n\tvar spritesArray = [];\n\n\tfunction init() {\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\t\tspritesArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction pushSprite( sprite ) {\n\n\t\tspritesArray.push( sprite );\n\n\t}\n\n\tfunction setupLights( camera ) {\n\n\t\tlights.setup( lightsArray, shadowsArray, camera );\n\n\t}\n\n\tvar state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\t\tspritesArray: spritesArray,\n\n\t\tlights: lights\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow,\n\t\tpushSprite: pushSprite\n\t};\n\n}\n\nfunction WebGLRenderStates() {\n\n\tvar renderStates = {};\n\n\tfunction get( scene, camera ) {\n\n\t\tvar hash = scene.id + ',' + camera.id;\n\n\t\tvar renderState = renderStates[ hash ];\n\n\t\tif ( renderState === undefined ) {\n\n\t\t\trenderState = new WebGLRenderState();\n\t\t\trenderStates[ hash ] = renderState;\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = {};\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author bhouston / https://clara.io\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n *\n * opacity: <float>,\n *\n * map: new THREE.Texture( <Image> ),\n *\n * alphaMap: new THREE.Texture( <Image> ),\n *\n * displacementMap: new THREE.Texture( <Image> ),\n * displacementScale: <float>,\n * displacementBias: <float>,\n *\n * wireframe: <boolean>,\n * wireframeLinewidth: <float>\n * }\n */\n\nfunction MeshDepthMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshDepthMaterial';\n\n\tthis.depthPacking = BasicDepthPacking;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshDepthMaterial.prototype = Object.create( Material.prototype );\nMeshDepthMaterial.prototype.constructor = MeshDepthMaterial;\n\nMeshDepthMaterial.prototype.isMeshDepthMaterial = true;\n\nMeshDepthMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.depthPacking = source.depthPacking;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\treturn this;\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n *\n * referencePosition: <float>,\n * nearDistance: <float>,\n * farDistance: <float>,\n *\n * skinning: <bool>,\n * morphTargets: <bool>,\n *\n * map: new THREE.Texture( <Image> ),\n *\n * alphaMap: new THREE.Texture( <Image> ),\n *\n * displacementMap: new THREE.Texture( <Image> ),\n * displacementScale: <float>,\n * displacementBias: <float>\n *\n * }\n */\n\nfunction MeshDistanceMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshDistanceMaterial';\n\n\tthis.referencePosition = new Vector3();\n\tthis.nearDistance = 1;\n\tthis.farDistance = 1000;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshDistanceMaterial.prototype = Object.create( Material.prototype );\nMeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial;\n\nMeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;\n\nMeshDistanceMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.referencePosition.copy( source.referencePosition );\n\tthis.nearDistance = source.nearDistance;\n\tthis.farDistance = source.farDistance;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLShadowMap( _renderer, _objects, maxTextureSize ) {\n\n\tvar _frustum = new Frustum(),\n\t\t_projScreenMatrix = new Matrix4(),\n\n\t\t_shadowMapSize = new Vector2(),\n\t\t_maxShadowMapSize = new Vector2( maxTextureSize, maxTextureSize ),\n\n\t\t_lookTarget = new Vector3(),\n\t\t_lightPositionWorld = new Vector3(),\n\n\t\t_MorphingFlag = 1,\n\t\t_SkinningFlag = 2,\n\n\t\t_NumberOfMaterialVariants = ( _MorphingFlag | _SkinningFlag ) + 1,\n\n\t\t_depthMaterials = new Array( _NumberOfMaterialVariants ),\n\t\t_distanceMaterials = new Array( _NumberOfMaterialVariants ),\n\n\t\t_materialCache = {};\n\n\tvar shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };\n\n\tvar cubeDirections = [\n\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t];\n\n\tvar cubeUps = [\n\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t];\n\n\tvar cube2DViewPorts = [\n\t\tnew Vector4(), new Vector4(), new Vector4(),\n\t\tnew Vector4(), new Vector4(), new Vector4()\n\t];\n\n\t// init\n\n\tfor ( var i = 0; i !== _NumberOfMaterialVariants; ++ i ) {\n\n\t\tvar useMorphing = ( i & _MorphingFlag ) !== 0;\n\t\tvar useSkinning = ( i & _SkinningFlag ) !== 0;\n\n\t\tvar depthMaterial = new MeshDepthMaterial( {\n\n\t\t\tdepthPacking: RGBADepthPacking,\n\n\t\t\tmorphTargets: useMorphing,\n\t\t\tskinning: useSkinning\n\n\t\t} );\n\n\t\t_depthMaterials[ i ] = depthMaterial;\n\n\t\t//\n\n\t\tvar distanceMaterial = new MeshDistanceMaterial( {\n\n\t\t\tmorphTargets: useMorphing,\n\t\t\tskinning: useSkinning\n\n\t\t} );\n\n\t\t_distanceMaterials[ i ] = distanceMaterial;\n\n\t}\n\n\t//\n\n\tvar scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\t// TODO Clean up (needed in case of contextlost)\n\t\tvar _gl = _renderer.context;\n\t\tvar _state = _renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.disable( _gl.BLEND );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// render depth map\n\n\t\tvar faceCount;\n\n\t\tfor ( var i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tvar light = lights[ i ];\n\t\t\tvar shadow = light.shadow;\n\t\t\tvar isPointLight = light && light.isPointLight;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tvar shadowCamera = shadow.camera;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\t\t\t_shadowMapSize.min( _maxShadowMapSize );\n\n\t\t\tif ( isPointLight ) {\n\n\t\t\t\tvar vpWidth = _shadowMapSize.x;\n\t\t\t\tvar vpHeight = _shadowMapSize.y;\n\n\t\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t\t// following orientation:\n\t\t\t\t//\n\t\t\t\t// xzXZ\n\t\t\t\t// y Y\n\t\t\t\t//\n\t\t\t\t// X - Positive x direction\n\t\t\t\t// x - Negative x direction\n\t\t\t\t// Y - Positive y direction\n\t\t\t\t// y - Negative y direction\n\t\t\t\t// Z - Positive z direction\n\t\t\t\t// z - Negative z direction\n\n\t\t\t\t// positive X\n\t\t\t\tcube2DViewPorts[ 0 ].set( vpWidth * 2, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// negative X\n\t\t\t\tcube2DViewPorts[ 1 ].set( 0, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// positive Z\n\t\t\t\tcube2DViewPorts[ 2 ].set( vpWidth * 3, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// negative Z\n\t\t\t\tcube2DViewPorts[ 3 ].set( vpWidth, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// positive Y\n\t\t\t\tcube2DViewPorts[ 4 ].set( vpWidth * 3, 0, vpWidth, vpHeight );\n\t\t\t\t// negative Y\n\t\t\t\tcube2DViewPorts[ 5 ].set( vpWidth, 0, vpWidth, vpHeight );\n\n\t\t\t\t_shadowMapSize.x *= 4.0;\n\t\t\t\t_shadowMapSize.y *= 2.0;\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\tvar pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat };\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + \".shadowMap\";\n\n\t\t\t\tshadowCamera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tif ( shadow.isSpotLightShadow ) {\n\n\t\t\t\tshadow.update( light );\n\n\t\t\t}\n\n\t\t\tvar shadowMap = shadow.map;\n\t\t\tvar shadowMatrix = shadow.matrix;\n\n\t\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\t\tshadowCamera.position.copy( _lightPositionWorld );\n\n\t\t\tif ( isPointLight ) {\n\n\t\t\t\tfaceCount = 6;\n\n\t\t\t\t// for point lights we set the shadow matrix to be a translation-only matrix\n\t\t\t\t// equal to inverse of the light's position\n\n\t\t\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t\t} else {\n\n\t\t\t\tfaceCount = 1;\n\n\t\t\t\t_lookTarget.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tshadowCamera.lookAt( _lookTarget );\n\t\t\t\tshadowCamera.updateMatrixWorld();\n\n\t\t\t\t// compute shadow matrix\n\n\t\t\t\tshadowMatrix.set(\n\t\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t\t);\n\n\t\t\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\n\t\t\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\n\n\t\t\t}\n\n\t\t\t_renderer.setRenderTarget( shadowMap );\n\t\t\t_renderer.clear();\n\n\t\t\t// render shadow map for each cube face (if omni-directional) or\n\t\t\t// run a single pass if not\n\n\t\t\tfor ( var face = 0; face < faceCount; face ++ ) {\n\n\t\t\t\tif ( isPointLight ) {\n\n\t\t\t\t\t_lookTarget.copy( shadowCamera.position );\n\t\t\t\t\t_lookTarget.add( cubeDirections[ face ] );\n\t\t\t\t\tshadowCamera.up.copy( cubeUps[ face ] );\n\t\t\t\t\tshadowCamera.lookAt( _lookTarget );\n\t\t\t\t\tshadowCamera.updateMatrixWorld();\n\n\t\t\t\t\tvar vpDimensions = cube2DViewPorts[ face ];\n\t\t\t\t\t_state.viewport( vpDimensions );\n\n\t\t\t\t}\n\n\t\t\t\t// update camera matrices and frustum\n\n\t\t\t\t_projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\t\t\t_frustum.setFromMatrix( _projScreenMatrix );\n\n\t\t\t\t// set object matrices & frustum culling\n\n\t\t\t\trenderObject( scene, camera, shadowCamera, isPointLight );\n\n\t\t\t}\n\n\t\t}\n\n\t\tscope.needsUpdate = false;\n\n\t};\n\n\tfunction getDepthMaterial( object, material, isPointLight, lightPositionWorld, shadowCameraNear, shadowCameraFar ) {\n\n\t\tvar geometry = object.geometry;\n\n\t\tvar result = null;\n\n\t\tvar materialVariants = _depthMaterials;\n\t\tvar customMaterial = object.customDepthMaterial;\n\n\t\tif ( isPointLight ) {\n\n\t\t\tmaterialVariants = _distanceMaterials;\n\t\t\tcustomMaterial = object.customDistanceMaterial;\n\n\t\t}\n\n\t\tif ( ! customMaterial ) {\n\n\t\t\tvar useMorphing = false;\n\n\t\t\tif ( material.morphTargets ) {\n\n\t\t\t\tif ( geometry && geometry.isBufferGeometry ) {\n\n\t\t\t\t\tuseMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0;\n\n\t\t\t\t} else if ( geometry && geometry.isGeometry ) {\n\n\t\t\t\t\tuseMorphing = geometry.morphTargets && geometry.morphTargets.length > 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( object.isSkinnedMesh && material.skinning === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object );\n\n\t\t\t}\n\n\t\t\tvar useSkinning = object.isSkinnedMesh && material.skinning;\n\n\t\t\tvar variantIndex = 0;\n\n\t\t\tif ( useMorphing ) variantIndex |= _MorphingFlag;\n\t\t\tif ( useSkinning ) variantIndex |= _SkinningFlag;\n\n\t\t\tresult = materialVariants[ variantIndex ];\n\n\t\t} else {\n\n\t\t\tresult = customMaterial;\n\n\t\t}\n\n\t\tif ( _renderer.localClippingEnabled &&\n\t\t\t\tmaterial.clipShadows === true &&\n\t\t\t\tmaterial.clippingPlanes.length !== 0 ) {\n\n\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t// appropriate state\n\n\t\t\tvar keyA = result.uuid, keyB = material.uuid;\n\n\t\t\tvar materialsForVariant = _materialCache[ keyA ];\n\n\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t}\n\n\t\t\tvar cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\n\t\t\t}\n\n\t\t\tresult = cachedMaterial;\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tresult.side = ( material.shadowSide != null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( isPointLight && result.isMeshDistanceMaterial ) {\n\n\t\t\tresult.referencePosition.copy( lightPositionWorld );\n\t\t\tresult.nearDistance = shadowCameraNear;\n\t\t\tresult.farDistance = shadowCameraFar;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, isPointLight ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tvar visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( object.castShadow && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tvar geometry = _objects.update( object );\n\t\t\t\tvar material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tvar groups = geometry.groups;\n\n\t\t\t\t\tfor ( var k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tvar group = groups[ k ];\n\t\t\t\t\t\tvar groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tvar depthMaterial = getDepthMaterial( object, groupMaterial, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far );\n\t\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tvar depthMaterial = getDepthMaterial( object, material, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far );\n\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, isPointLight );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\tTexture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.needsUpdate = true;\n\n}\n\nCanvasTexture.prototype = Object.create( Texture.prototype );\nCanvasTexture.prototype.constructor = CanvasTexture;\nCanvasTexture.prototype.isCanvasTexture = true;\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction WebGLSpriteRenderer( renderer, gl, state, textures, capabilities ) {\n\n\tvar vertexBuffer, elementBuffer;\n\tvar program, attributes, uniforms;\n\n\tvar texture;\n\n\t// decompose matrixWorld\n\n\tvar spritePosition = new Vector3();\n\tvar spriteRotation = new Quaternion();\n\tvar spriteScale = new Vector3();\n\n\tfunction init() {\n\n\t\tvar vertices = new Float32Array( [\n\t\t\t- 0.5, - 0.5, 0, 0,\n\t\t\t 0.5, - 0.5, 1, 0,\n\t\t\t 0.5, 0.5, 1, 1,\n\t\t\t- 0.5, 0.5, 0, 1\n\t\t] );\n\n\t\tvar faces = new Uint16Array( [\n\t\t\t0, 1, 2,\n\t\t\t0, 2, 3\n\t\t] );\n\n\t\tvertexBuffer = gl.createBuffer();\n\t\telementBuffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\n\t\tgl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW );\n\n\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\n\t\tgl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW );\n\n\t\tprogram = createProgram();\n\n\t\tattributes = {\n\t\t\tposition: gl.getAttribLocation( program, 'position' ),\n\t\t\tuv: gl.getAttribLocation( program, 'uv' )\n\t\t};\n\n\t\tuniforms = {\n\t\t\tuvOffset: gl.getUniformLocation( program, 'uvOffset' ),\n\t\t\tuvScale: gl.getUniformLocation( program, 'uvScale' ),\n\n\t\t\trotation: gl.getUniformLocation( program, 'rotation' ),\n\t\t\tcenter: gl.getUniformLocation( program, 'center' ),\n\t\t\tscale: gl.getUniformLocation( program, 'scale' ),\n\n\t\t\tcolor: gl.getUniformLocation( program, 'color' ),\n\t\t\tmap: gl.getUniformLocation( program, 'map' ),\n\t\t\topacity: gl.getUniformLocation( program, 'opacity' ),\n\n\t\t\tmodelViewMatrix: gl.getUniformLocation( program, 'modelViewMatrix' ),\n\t\t\tprojectionMatrix: gl.getUniformLocation( program, 'projectionMatrix' ),\n\n\t\t\tfogType: gl.getUniformLocation( program, 'fogType' ),\n\t\t\tfogDensity: gl.getUniformLocation( program, 'fogDensity' ),\n\t\t\tfogNear: gl.getUniformLocation( program, 'fogNear' ),\n\t\t\tfogFar: gl.getUniformLocation( program, 'fogFar' ),\n\t\t\tfogColor: gl.getUniformLocation( program, 'fogColor' ),\n\t\t\tfogDepth: gl.getUniformLocation( program, 'fogDepth' ),\n\n\t\t\talphaTest: gl.getUniformLocation( program, 'alphaTest' )\n\t\t};\n\n\t\tvar canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\tcanvas.width = 8;\n\t\tcanvas.height = 8;\n\n\t\tvar context = canvas.getContext( '2d' );\n\t\tcontext.fillStyle = 'white';\n\t\tcontext.fillRect( 0, 0, 8, 8 );\n\n\t\ttexture = new CanvasTexture( canvas );\n\n\t}\n\n\tthis.render = function ( sprites, scene, camera ) {\n\n\t\tif ( sprites.length === 0 ) return;\n\n\t\t// setup gl\n\n\t\tif ( program === undefined ) {\n\n\t\t\tinit();\n\n\t\t}\n\n\t\tstate.useProgram( program );\n\n\t\tstate.initAttributes();\n\t\tstate.enableAttribute( attributes.position );\n\t\tstate.enableAttribute( attributes.uv );\n\t\tstate.disableUnusedAttributes();\n\n\t\tstate.disable( gl.CULL_FACE );\n\t\tstate.enable( gl.BLEND );\n\n\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\n\t\tgl.vertexAttribPointer( attributes.position, 2, gl.FLOAT, false, 2 * 8, 0 );\n\t\tgl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 );\n\n\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\n\n\t\tgl.uniformMatrix4fv( uniforms.projectionMatrix, false, camera.projectionMatrix.elements );\n\n\t\tstate.activeTexture( gl.TEXTURE0 );\n\t\tgl.uniform1i( uniforms.map, 0 );\n\n\t\tvar oldFogType = 0;\n\t\tvar sceneFogType = 0;\n\t\tvar fog = scene.fog;\n\n\t\tif ( fog ) {\n\n\t\t\tgl.uniform3f( uniforms.fogColor, fog.color.r, fog.color.g, fog.color.b );\n\n\t\t\tif ( fog.isFog ) {\n\n\t\t\t\tgl.uniform1f( uniforms.fogNear, fog.near );\n\t\t\t\tgl.uniform1f( uniforms.fogFar, fog.far );\n\n\t\t\t\tgl.uniform1i( uniforms.fogType, 1 );\n\t\t\t\toldFogType = 1;\n\t\t\t\tsceneFogType = 1;\n\n\t\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\t\tgl.uniform1f( uniforms.fogDensity, fog.density );\n\n\t\t\t\tgl.uniform1i( uniforms.fogType, 2 );\n\t\t\t\toldFogType = 2;\n\t\t\t\tsceneFogType = 2;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tgl.uniform1i( uniforms.fogType, 0 );\n\t\t\toldFogType = 0;\n\t\t\tsceneFogType = 0;\n\n\t\t}\n\n\n\t\t// update positions and sort\n\n\t\tfor ( var i = 0, l = sprites.length; i < l; i ++ ) {\n\n\t\t\tvar sprite = sprites[ i ];\n\n\t\t\tsprite.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, sprite.matrixWorld );\n\t\t\tsprite.z = - sprite.modelViewMatrix.elements[ 14 ];\n\n\t\t}\n\n\t\tsprites.sort( painterSortStable );\n\n\t\t// render all sprites\n\n\t\tvar scale = [];\n\t\tvar center = [];\n\n\t\tfor ( var i = 0, l = sprites.length; i < l; i ++ ) {\n\n\t\t\tvar sprite = sprites[ i ];\n\t\t\tvar material = sprite.material;\n\n\t\t\tif ( material.visible === false ) continue;\n\n\t\t\tsprite.onBeforeRender( renderer, scene, camera, undefined, material, undefined );\n\n\t\t\tgl.uniform1f( uniforms.alphaTest, material.alphaTest );\n\t\t\tgl.uniformMatrix4fv( uniforms.modelViewMatrix, false, sprite.modelViewMatrix.elements );\n\n\t\t\tsprite.matrixWorld.decompose( spritePosition, spriteRotation, spriteScale );\n\n\t\t\tscale[ 0 ] = spriteScale.x;\n\t\t\tscale[ 1 ] = spriteScale.y;\n\n\t\t\tcenter[ 0 ] = sprite.center.x - 0.5;\n\t\t\tcenter[ 1 ] = sprite.center.y - 0.5;\n\n\t\t\tvar fogType = 0;\n\n\t\t\tif ( scene.fog && material.fog ) {\n\n\t\t\t\tfogType = sceneFogType;\n\n\t\t\t}\n\n\t\t\tif ( oldFogType !== fogType ) {\n\n\t\t\t\tgl.uniform1i( uniforms.fogType, fogType );\n\t\t\t\toldFogType = fogType;\n\n\t\t\t}\n\n\t\t\tif ( material.map !== null ) {\n\n\t\t\t\tgl.uniform2f( uniforms.uvOffset, material.map.offset.x, material.map.offset.y );\n\t\t\t\tgl.uniform2f( uniforms.uvScale, material.map.repeat.x, material.map.repeat.y );\n\n\t\t\t} else {\n\n\t\t\t\tgl.uniform2f( uniforms.uvOffset, 0, 0 );\n\t\t\t\tgl.uniform2f( uniforms.uvScale, 1, 1 );\n\n\t\t\t}\n\n\t\t\tgl.uniform1f( uniforms.opacity, material.opacity );\n\t\t\tgl.uniform3f( uniforms.color, material.color.r, material.color.g, material.color.b );\n\n\t\t\tgl.uniform1f( uniforms.rotation, material.rotation );\n\t\t\tgl.uniform2fv( uniforms.center, center );\n\t\t\tgl.uniform2fv( uniforms.scale, scale );\n\n\t\t\tstate.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\t\t\tstate.buffers.depth.setTest( material.depthTest );\n\t\t\tstate.buffers.depth.setMask( material.depthWrite );\n\t\t\tstate.buffers.color.setMask( material.colorWrite );\n\n\t\t\ttextures.setTexture2D( material.map || texture, 0 );\n\n\t\t\tgl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );\n\n\t\t\tsprite.onAfterRender( renderer, scene, camera, undefined, material, undefined );\n\n\t\t}\n\n\t\t// restore gl\n\n\t\tstate.enable( gl.CULL_FACE );\n\n\t\tstate.reset();\n\n\t};\n\n\tfunction createProgram() {\n\n\t\tvar program = gl.createProgram();\n\n\t\tvar vertexShader = gl.createShader( gl.VERTEX_SHADER );\n\t\tvar fragmentShader = gl.createShader( gl.FRAGMENT_SHADER );\n\n\t\tgl.shaderSource( vertexShader, [\n\n\t\t\t'precision ' + capabilities.precision + ' float;',\n\n\t\t\t'#define SHADER_NAME ' + 'SpriteMaterial',\n\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform float rotation;',\n\t\t\t'uniform vec2 center;',\n\t\t\t'uniform vec2 scale;',\n\t\t\t'uniform vec2 uvOffset;',\n\t\t\t'uniform vec2 uvScale;',\n\n\t\t\t'attribute vec2 position;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'varying vec2 vUV;',\n\t\t\t'varying float fogDepth;',\n\n\t\t\t'void main() {',\n\n\t\t\t'\tvUV = uvOffset + uv * uvScale;',\n\n\t\t\t'\tvec2 alignedPosition = ( position - center ) * scale;',\n\n\t\t\t'\tvec2 rotatedPosition;',\n\t\t\t'\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;',\n\t\t\t'\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;',\n\n\t\t\t'\tvec4 mvPosition;',\n\n\t\t\t'\tmvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );',\n\t\t\t'\tmvPosition.xy += rotatedPosition;',\n\n\t\t\t'\tgl_Position = projectionMatrix * mvPosition;',\n\n\t\t\t'\tfogDepth = - mvPosition.z;',\n\n\t\t\t'}'\n\n\t\t].join( '\\n' ) );\n\n\t\tgl.shaderSource( fragmentShader, [\n\n\t\t\t'precision ' + capabilities.precision + ' float;',\n\n\t\t\t'#define SHADER_NAME ' + 'SpriteMaterial',\n\n\t\t\t'uniform vec3 color;',\n\t\t\t'uniform sampler2D map;',\n\t\t\t'uniform float opacity;',\n\n\t\t\t'uniform int fogType;',\n\t\t\t'uniform vec3 fogColor;',\n\t\t\t'uniform float fogDensity;',\n\t\t\t'uniform float fogNear;',\n\t\t\t'uniform float fogFar;',\n\t\t\t'uniform float alphaTest;',\n\n\t\t\t'varying vec2 vUV;',\n\t\t\t'varying float fogDepth;',\n\n\t\t\t'void main() {',\n\n\t\t\t'\tvec4 texture = texture2D( map, vUV );',\n\n\t\t\t'\tgl_FragColor = vec4( color * texture.xyz, texture.a * opacity );',\n\n\t\t\t'\tif ( gl_FragColor.a < alphaTest ) discard;',\n\n\t\t\t'\tif ( fogType > 0 ) {',\n\n\t\t\t'\t\tfloat fogFactor = 0.0;',\n\n\t\t\t'\t\tif ( fogType == 1 ) {',\n\n\t\t\t'\t\t\tfogFactor = smoothstep( fogNear, fogFar, fogDepth );',\n\n\t\t\t'\t\t} else {',\n\n\t\t\t'\t\t\tconst float LOG2 = 1.442695;',\n\t\t\t'\t\t\tfogFactor = exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 );',\n\t\t\t'\t\t\tfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );',\n\n\t\t\t'\t\t}',\n\n\t\t\t'\t\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );',\n\n\t\t\t'\t}',\n\n\t\t\t'}'\n\n\t\t].join( '\\n' ) );\n\n\t\tgl.compileShader( vertexShader );\n\t\tgl.compileShader( fragmentShader );\n\n\t\tgl.attachShader( program, vertexShader );\n\t\tgl.attachShader( program, fragmentShader );\n\n\t\tgl.linkProgram( program );\n\n\t\treturn program;\n\n\t}\n\n\tfunction painterSortStable( a, b ) {\n\n\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\treturn a.renderOrder - b.renderOrder;\n\n\t\t} else if ( a.z !== b.z ) {\n\n\t\t\treturn b.z - a.z;\n\n\t\t} else {\n\n\t\t\treturn b.id - a.id;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLState( gl, extensions, utils ) {\n\n\tfunction ColorBuffer() {\n\n\t\tvar locked = false;\n\n\t\tvar color = new Vector4();\n\t\tvar currentColorMask = null;\n\t\tvar currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tvar locked = false;\n\n\t\tvar currentDepthMask = null;\n\t\tvar currentDepthFunc = null;\n\t\tvar currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( gl.DEPTH_TEST );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( gl.DEPTH_TEST );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tif ( depthFunc ) {\n\n\t\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.NEVER );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.ALWAYS );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.LESS );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.EQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.GEQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.GREATER );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.NOTEQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tvar locked = false;\n\n\t\tvar currentStencilMask = null;\n\t\tvar currentStencilFunc = null;\n\t\tvar currentStencilRef = null;\n\t\tvar currentStencilFuncMask = null;\n\t\tvar currentStencilFail = null;\n\t\tvar currentStencilZFail = null;\n\t\tvar currentStencilZPass = null;\n\t\tvar currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\tenable( gl.STENCIL_TEST );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( gl.STENCIL_TEST );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t currentStencilRef \t!== stencilRef \t||\n\t\t\t\t currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail\t !== stencilFail \t||\n\t\t\t\t currentStencilZFail !== stencilZFail ||\n\t\t\t\t currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tvar colorBuffer = new ColorBuffer();\n\tvar depthBuffer = new DepthBuffer();\n\tvar stencilBuffer = new StencilBuffer();\n\n\tvar maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\tvar newAttributes = new Uint8Array( maxVertexAttributes );\n\tvar enabledAttributes = new Uint8Array( maxVertexAttributes );\n\tvar attributeDivisors = new Uint8Array( maxVertexAttributes );\n\n\tvar capabilities = {};\n\n\tvar compressedTextureFormats = null;\n\n\tvar currentProgram = null;\n\n\tvar currentBlending = null;\n\tvar currentBlendEquation = null;\n\tvar currentBlendSrc = null;\n\tvar currentBlendDst = null;\n\tvar currentBlendEquationAlpha = null;\n\tvar currentBlendSrcAlpha = null;\n\tvar currentBlendDstAlpha = null;\n\tvar currentPremultipledAlpha = false;\n\n\tvar currentFlipSided = null;\n\tvar currentCullFace = null;\n\n\tvar currentLineWidth = null;\n\n\tvar currentPolygonOffsetFactor = null;\n\tvar currentPolygonOffsetUnits = null;\n\n\tvar maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS );\n\n\tvar lineWidthAvailable = false;\n\tvar version = 0;\n\tvar glVersion = gl.getParameter( gl.VERSION );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL\\ ([0-9])/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^OpenGL\\ ES\\ ([0-9])/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tvar currentTextureSlot = null;\n\tvar currentBoundTextures = {};\n\n\tvar currentScissor = new Vector4();\n\tvar currentViewport = new Vector4();\n\n\tfunction createTexture( type, target, count ) {\n\n\t\tvar data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tvar texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\n\t\tgl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\n\n\t\tfor ( var i = 0; i < count; i ++ ) {\n\n\t\t\tgl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tvar emptyTextures = {};\n\temptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 );\n\temptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( gl.DEPTH_TEST );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( gl.CULL_FACE );\n\n\tenable( gl.BLEND );\n\tsetBlending( NormalBlending );\n\n\t//\n\n\tfunction initAttributes() {\n\n\t\tfor ( var i = 0, l = newAttributes.length; i < l; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension.vertexAttribDivisorANGLE( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tfor ( var i = 0, l = enabledAttributes.length; i !== l; ++ i ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction enable( id ) {\n\n\t\tif ( capabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tcapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( capabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tcapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction getCompressedTextureFormats() {\n\n\t\tif ( compressedTextureFormats === null ) {\n\n\t\t\tcompressedTextureFormats = [];\n\n\t\t\tif ( extensions.get( 'WEBGL_compressed_texture_pvrtc' ) ||\n\t\t\t extensions.get( 'WEBGL_compressed_texture_s3tc' ) ||\n\t\t\t extensions.get( 'WEBGL_compressed_texture_etc1' ) ||\n\t\t\t extensions.get( 'WEBGL_compressed_texture_astc' ) ) {\n\n\t\t\t\tvar formats = gl.getParameter( gl.COMPRESSED_TEXTURE_FORMATS );\n\n\t\t\t\tfor ( var i = 0; i < formats.length; i ++ ) {\n\n\t\t\t\t\tcompressedTextureFormats.push( formats[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn compressedTextureFormats;\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending !== NoBlending ) {\n\n\t\t\tenable( gl.BLEND );\n\n\t\t} else {\n\n\t\t\tdisable( gl.BLEND );\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\tcase AdditiveBlending:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE, gl.ONE, gl.ONE );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFunc( gl.SRC_ALPHA, gl.ONE );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase SubtractiveBlending:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.ONE_MINUS_SRC_COLOR );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase MultiplyBlending:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.SRC_COLOR );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tcurrentBlendEquation = null;\n\t\t\tcurrentBlendSrc = null;\n\t\t\tcurrentBlendDst = null;\n\t\t\tcurrentBlendEquationAlpha = null;\n\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t} else {\n\n\t\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\t\tgl.blendEquationSeparate( utils.convert( blendEquation ), utils.convert( blendEquationAlpha ) );\n\n\t\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t\t}\n\n\t\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\t\tgl.blendFuncSeparate( utils.convert( blendSrc ), utils.convert( blendDst ), utils.convert( blendSrcAlpha ), utils.convert( blendDstAlpha ) );\n\n\t\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\t\tcurrentBlendDst = blendDst;\n\t\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( gl.CULL_FACE )\n\t\t\t: enable( gl.CULL_FACE );\n\n\t\tvar flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( gl.CW );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( gl.CCW );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( gl.CULL_FACE );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( gl.BACK );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT_AND_BACK );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.CULL_FACE );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( gl.POLYGON_OFFSET_FILL );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.POLYGON_OFFSET_FILL );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( gl.SCISSOR_TEST );\n\n\t\t} else {\n\n\t\t\tdisable( gl.SCISSOR_TEST );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture ) {\n\n\t\tif ( currentTextureSlot === null ) {\n\n\t\t\tactiveTexture();\n\n\t\t}\n\n\t\tvar boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ currentTextureSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\tfor ( var i = 0; i < enabledAttributes.length; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] === 1 ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcapabilities = {};\n\n\t\tcompressedTextureFormats = null;\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlending = null;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tenableAttributeAndDivisor: enableAttributeAndDivisor,\n\t\tdisableUnusedAttributes: disableUnusedAttributes,\n\t\tenable: enable,\n\t\tdisable: disable,\n\t\tgetCompressedTextureFormats: getCompressedTextureFormats,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\ttexImage2D: texImage2D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tvar _isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && _gl instanceof WebGL2RenderingContext ); /* global WebGL2RenderingContext */\n\tvar _videoTextures = {};\n\tvar _canvas;\n\n\t//\n\n\tfunction clampToMaxSize( image, maxSize ) {\n\n\t\tif ( image.width > maxSize || image.height > maxSize ) {\n\n\t\t\tif ( 'data' in image ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: image in DataTexture is too big (' + image.width + 'x' + image.height + ').' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// Warning: Scaling through the canvas will only work with images that use\n\t\t\t// premultiplied alpha.\n\n\t\t\tvar scale = maxSize / Math.max( image.width, image.height );\n\n\t\t\tvar canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\t\tcanvas.width = Math.floor( image.width * scale );\n\t\t\tcanvas.height = Math.floor( image.height * scale );\n\n\t\t\tvar context = canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height );\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: image is too big (' + image.width + 'x' + image.height + '). Resized to ' + canvas.width + 'x' + canvas.height, image );\n\n\t\t\treturn canvas;\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction isPowerOfTwo( image ) {\n\n\t\treturn _Math.isPowerOfTwo( image.width ) && _Math.isPowerOfTwo( image.height );\n\n\t}\n\n\tfunction makePowerOfTwo( image ) {\n\n\t\tif ( image instanceof HTMLImageElement || image instanceof HTMLCanvasElement || image instanceof ImageBitmap ) {\n\n\t\t\tif ( _canvas === undefined ) _canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t\t\t_canvas.width = _Math.floorPowerOfTwo( image.width );\n\t\t\t_canvas.height = _Math.floorPowerOfTwo( image.height );\n\n\t\t\tvar context = _canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, _canvas.width, _canvas.height );\n\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 );\n\n\t\t\treturn _canvas;\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction textureNeedsPowerOfTwo( texture ) {\n\n\t\treturn ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||\n\t\t\t( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture, isPowerOfTwo ) {\n\n\t\treturn texture.generateMipmaps && isPowerOfTwo &&\n\t\t\ttexture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t}\n\n\tfunction generateMipmap( target, texture, width, height ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\t// Note: Math.log( x ) * Math.LOG2E used instead of Math.log2( x ) which is not supported by IE11\n\t\ttextureProperties.__maxMipLevel = Math.log( Math.max( width, height ) ) * Math.LOG2E;\n\n\t}\n\n\t// Fallback filters for non-power-of-2 textures\n\n\tfunction filterFallback( f ) {\n\n\t\tif ( f === NearestFilter || f === NearestMipMapNearestFilter || f === NearestMipMapLinearFilter ) {\n\n\t\t\treturn _gl.NEAREST;\n\n\t\t}\n\n\t\treturn _gl.LINEAR;\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tvar texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\tdelete _videoTextures[ texture.id ];\n\n\t\t}\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tvar renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\tif ( texture.image && textureProperties.__image__webglTextureCube ) {\n\n\t\t\t// cube texture\n\n\t\t\t_gl.deleteTexture( textureProperties.__image__webglTextureCube );\n\n\t\t} else {\n\n\t\t\t// 2D texture\n\n\t\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t}\n\n\t\t// remove all webgl properties\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tvar renderTargetProperties = properties.get( renderTarget );\n\t\tvar textureProperties = properties.get( renderTarget.texture );\n\n\t\tif ( ! renderTarget ) return;\n\n\t\tif ( textureProperties.__webglTexture !== undefined ) {\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t}\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLRenderTargetCube ) {\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\n\t\t}\n\n\t\tproperties.remove( renderTarget.texture );\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tvar image = texture.image;\n\n\t\t\tif ( image === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined', texture );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete', texture );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\tif ( texture.image.length === 6 ) {\n\n\t\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\t\tif ( ! textureProperties.__image__webglTextureCube ) {\n\n\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\ttextureProperties.__image__webglTextureCube = _gl.createTexture();\n\n\t\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube );\n\n\t\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\n\t\t\t\tvar isCompressed = ( texture && texture.isCompressedTexture );\n\t\t\t\tvar isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\t\t\tvar cubeImage = [];\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\t\t\tcubeImage[ i ] = clampToMaxSize( texture.image[ i ], capabilities.maxCubemapSize );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar image = cubeImage[ 0 ],\n\t\t\t\t\tisPowerOfTwoImage = isPowerOfTwo( image ),\n\t\t\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, isPowerOfTwoImage );\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( ! isCompressed ) {\n\n\t\t\t\t\t\tif ( isDataTexture ) {\n\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 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar mipmap, mipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\t\t\tfor ( var j = 0, jl = mipmaps.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tmipmap = mipmaps[ j ];\n\n\t\t\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\t\t\tif ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) {\n\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 );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\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 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! isCompressed ) {\n\n\t\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t\t}\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) {\n\n\t\t\t\t\t// We assume images for cube map have the same size.\n\t\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP, texture, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t\ttextureProperties.__version = texture.version;\n\n\t\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t\t} else {\n\n\t\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction setTextureCubeDynamic( texture, slot ) {\n\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, properties.get( texture ).__webglTexture );\n\n\t}\n\n\tfunction setTextureParameters( textureType, texture, isPowerOfTwoImage ) {\n\n\t\tvar extension;\n\n\t\tif ( isPowerOfTwoImage ) {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, utils.convert( texture.wrapS ) );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, utils.convert( texture.wrapT ) );\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, utils.convert( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, utils.convert( texture.minFilter ) );\n\n\t\t} else {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE );\n\n\t\t\tif ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {\n\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 );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) );\n\n\t\t\tif ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {\n\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 );\n\n\t\t\t}\n\n\t\t}\n\n\t\textension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\tif ( extension ) {\n\n\t\t\tif ( texture.type === FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return;\n\t\t\tif ( texture.type === HalfFloatType && extensions.get( 'OES_texture_half_float_linear' ) === null ) return;\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\n\t\tvar image = clampToMaxSize( texture.image, capabilities.maxTextureSize );\n\n\t\tif ( textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( image ) === false ) {\n\n\t\t\timage = makePowerOfTwo( image );\n\n\t\t}\n\n\t\tvar isPowerOfTwoImage = isPowerOfTwo( image ),\n\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\tglType = utils.convert( texture.type );\n\n\t\tsetTextureParameters( _gl.TEXTURE_2D, texture, isPowerOfTwoImage );\n\n\t\tvar mipmap, mipmaps = texture.mipmaps;\n\n\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t// populate depth texture with dummy data\n\n\t\t\tvar internalFormat = _gl.DEPTH_COMPONENT;\n\n\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\tif ( ! _isWebGL2 ) throw new Error( 'Float Depth Texture only supported in WebGL2.0' );\n\t\t\t\tinternalFormat = _gl.DEPTH_COMPONENT32F;\n\n\t\t\t} else if ( _isWebGL2 ) {\n\n\t\t\t\t// WebGL 2.0 requires signed internalformat for glTexImage2D\n\t\t\t\tinternalFormat = _gl.DEPTH_COMPONENT16;\n\n\t\t\t}\n\n\t\t\tif ( texture.format === DepthFormat && internalFormat === _gl.DEPTH_COMPONENT ) {\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedShortType;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\tif ( texture.format === DepthStencilFormat ) {\n\n\t\t\t\tinternalFormat = _gl.DEPTH_STENCIL;\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedInt248Type ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedInt248Type;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, internalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && isPowerOfTwoImage ) {\n\n\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\tif ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) {\n\n\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t} else {\n\n\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && isPowerOfTwoImage ) {\n\n\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, glFormat, glType, mipmap );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glFormat, glFormat, glType, image );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) {\n\n\t\t\tgenerateMipmap( _gl.TEXTURE_2D, texture, image.width, image.height );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) {\n\n\t\tvar glFormat = utils.convert( renderTarget.texture.format );\n\t\tvar glType = utils.convert( renderTarget.texture.type );\n\t\tstate.texImage2D( textureTarget, 0, glFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 );\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget ) {\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_COMPONENT16, renderTarget.width, renderTarget.height );\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height );\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else {\n\n\t\t\t// FIXME: We don't support !depth !stencil\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.RGBA4, renderTarget.width, renderTarget.height );\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tvar isCube = ( renderTarget && renderTarget.isWebGLRenderTargetCube );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tvar webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tvar renderTargetProperties = properties.get( renderTarget );\n\n\t\tvar isCube = ( renderTarget.isWebGLRenderTargetCube === true );\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tvar renderTargetProperties = properties.get( renderTarget );\n\t\tvar textureProperties = properties.get( renderTarget.texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\tinfo.memory.textures ++;\n\n\t\tvar isCube = ( renderTarget.isWebGLRenderTargetCube === true );\n\t\tvar isTargetPowerOfTwo = isPowerOfTwo( renderTarget );\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, isTargetPowerOfTwo );\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, null );\n\n\t\t} else {\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( _gl.TEXTURE_2D, renderTarget.texture, isTargetPowerOfTwo );\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_2D, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_2D, null );\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tvar texture = renderTarget.texture;\n\t\tvar isTargetPowerOfTwo = isPowerOfTwo( renderTarget );\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, isTargetPowerOfTwo ) ) {\n\n\t\t\tvar target = renderTarget.isWebGLRenderTargetCube ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;\n\t\t\tvar webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\tgenerateMipmap( target, texture, renderTarget.width, renderTarget.height );\n\t\t\tstate.bindTexture( target, null );\n\n\t\t}\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tvar id = texture.id;\n\t\tvar frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures[ id ] !== frame ) {\n\n\t\t\t_videoTextures[ id ] = frame;\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.setTextureCubeDynamic = setTextureCubeDynamic;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\n}\n\n/**\n * @author thespite / http://www.twitter.com/thespite\n */\n\nfunction WebGLUtils( gl, extensions ) {\n\n\tfunction convert( p ) {\n\n\t\tvar extension;\n\n\t\tif ( p === RepeatWrapping ) return gl.REPEAT;\n\t\tif ( p === ClampToEdgeWrapping ) return gl.CLAMP_TO_EDGE;\n\t\tif ( p === MirroredRepeatWrapping ) return gl.MIRRORED_REPEAT;\n\n\t\tif ( p === NearestFilter ) return gl.NEAREST;\n\t\tif ( p === NearestMipMapNearestFilter ) return gl.NEAREST_MIPMAP_NEAREST;\n\t\tif ( p === NearestMipMapLinearFilter ) return gl.NEAREST_MIPMAP_LINEAR;\n\n\t\tif ( p === LinearFilter ) return gl.LINEAR;\n\t\tif ( p === LinearMipMapNearestFilter ) return gl.LINEAR_MIPMAP_NEAREST;\n\t\tif ( p === LinearMipMapLinearFilter ) return gl.LINEAR_MIPMAP_LINEAR;\n\n\t\tif ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE;\n\t\tif ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;\n\t\tif ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;\n\t\tif ( p === UnsignedShort565Type ) return gl.UNSIGNED_SHORT_5_6_5;\n\n\t\tif ( p === ByteType ) return gl.BYTE;\n\t\tif ( p === ShortType ) return gl.SHORT;\n\t\tif ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT;\n\t\tif ( p === IntType ) return gl.INT;\n\t\tif ( p === UnsignedIntType ) return gl.UNSIGNED_INT;\n\t\tif ( p === FloatType ) return gl.FLOAT;\n\n\t\tif ( p === HalfFloatType ) {\n\n\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\tif ( extension !== null ) return extension.HALF_FLOAT_OES;\n\n\t\t}\n\n\t\tif ( p === AlphaFormat ) return gl.ALPHA;\n\t\tif ( p === RGBFormat ) return gl.RGB;\n\t\tif ( p === RGBAFormat ) return gl.RGBA;\n\t\tif ( p === LuminanceFormat ) return gl.LUMINANCE;\n\t\tif ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA;\n\t\tif ( p === DepthFormat ) return gl.DEPTH_COMPONENT;\n\t\tif ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;\n\n\t\tif ( p === AddEquation ) return gl.FUNC_ADD;\n\t\tif ( p === SubtractEquation ) return gl.FUNC_SUBTRACT;\n\t\tif ( p === ReverseSubtractEquation ) return gl.FUNC_REVERSE_SUBTRACT;\n\n\t\tif ( p === ZeroFactor ) return gl.ZERO;\n\t\tif ( p === OneFactor ) return gl.ONE;\n\t\tif ( p === SrcColorFactor ) return gl.SRC_COLOR;\n\t\tif ( p === OneMinusSrcColorFactor ) return gl.ONE_MINUS_SRC_COLOR;\n\t\tif ( p === SrcAlphaFactor ) return gl.SRC_ALPHA;\n\t\tif ( p === OneMinusSrcAlphaFactor ) return gl.ONE_MINUS_SRC_ALPHA;\n\t\tif ( p === DstAlphaFactor ) return gl.DST_ALPHA;\n\t\tif ( p === OneMinusDstAlphaFactor ) return gl.ONE_MINUS_DST_ALPHA;\n\n\t\tif ( p === DstColorFactor ) return gl.DST_COLOR;\n\t\tif ( p === OneMinusDstColorFactor ) return gl.ONE_MINUS_DST_COLOR;\n\t\tif ( p === SrcAlphaSaturateFactor ) return gl.SRC_ALPHA_SATURATE;\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format ||\n\t\t\tp === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format ||\n\t\t\tp === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc1' );\n\n\t\t\tif ( extension !== null ) return extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t}\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn p;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === MinEquation || p === MaxEquation ) {\n\n\t\t\textension = extensions.get( 'EXT_blend_minmax' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === MinEquation ) return extension.MIN_EXT;\n\t\t\t\tif ( p === MaxEquation ) return extension.MAX_EXT;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === UnsignedInt248Type ) {\n\n\t\t\textension = extensions.get( 'WEBGL_depth_texture' );\n\n\t\t\tif ( extension !== null ) return extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t}\n\n\t\treturn 0;\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Group() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Group';\n\n}\n\nGroup.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Group,\n\n\tisGroup: true\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author greggman / http://games.greggman.com/\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author tschw\n */\n\nfunction PerspectiveCamera( fov, aspect, near, far ) {\n\n\tCamera.call( this );\n\n\tthis.type = 'PerspectiveCamera';\n\n\tthis.fov = fov !== undefined ? fov : 50;\n\tthis.zoom = 1;\n\n\tthis.near = near !== undefined ? near : 0.1;\n\tthis.far = far !== undefined ? far : 2000;\n\tthis.focus = 10;\n\n\tthis.aspect = aspect !== undefined ? aspect : 1;\n\tthis.view = null;\n\n\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\tthis.updateProjectionMatrix();\n\n}\n\nPerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\tconstructor: PerspectiveCamera,\n\n\tisPerspectiveCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength: function ( focalLength ) {\n\n\t\t// see http://www.bobatkins.com/photography/technical/field_of_view.html\n\t\tvar vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = _Math.RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength: function () {\n\n\t\tvar vExtentSlope = Math.tan( _Math.DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t},\n\n\tgetEffectiveFOV: function () {\n\n\t\treturn _Math.RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( _Math.DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t},\n\n\tgetFilmWidth: function () {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t},\n\n\tgetFilmHeight: function () {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t},\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t * +---+---+---+\n\t * | A | B | C |\n\t * +---+---+---+\n\t * | D | E | F |\n\t * +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t * var w = 1920;\n\t * var h = 1080;\n\t * var fullWidth = w * 3;\n\t * var fullHeight = h * 2;\n\t *\n\t * --A--\n\t * camera.setOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * --B--\n\t * camera.setOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * --C--\n\t * camera.setOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * --D--\n\t * camera.setOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * --E--\n\t * camera.setOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * --F--\n\t * camera.setOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t * Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tclearViewOffset: function () {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tupdateProjectionMatrix: function () {\n\n\t\tvar near = this.near,\n\t\t\ttop = near * Math.tan(\n\t\t\t\t_Math.DEG2RAD * 0.5 * this.fov ) / this.zoom,\n\t\t\theight = 2 * top,\n\t\t\twidth = this.aspect * height,\n\t\t\tleft = - 0.5 * width,\n\t\t\tview = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tvar fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tvar skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far );\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction ArrayCamera( array ) {\n\n\tPerspectiveCamera.call( this );\n\n\tthis.cameras = array || [];\n\n}\n\nArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), {\n\n\tconstructor: ArrayCamera,\n\n\tisArrayCamera: true\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebVRManager( renderer ) {\n\n\tvar scope = this;\n\n\tvar device = null;\n\tvar frameData = null;\n\n\tvar poseTarget = null;\n\n\tvar controllers = [];\n\tvar standingMatrix = new Matrix4();\n\tvar standingMatrixInverse = new Matrix4();\n\n\tif ( typeof window !== 'undefined' && 'VRFrameData' in window ) {\n\n\t\tframeData = new window.VRFrameData();\n\t\twindow.addEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange, false );\n\n\t}\n\n\tvar matrixWorldInverse = new Matrix4();\n\tvar tempQuaternion = new Quaternion();\n\tvar tempPosition = new Vector3();\n\n\tvar cameraL = new PerspectiveCamera();\n\tcameraL.bounds = new Vector4( 0.0, 0.0, 0.5, 1.0 );\n\tcameraL.layers.enable( 1 );\n\n\tvar cameraR = new PerspectiveCamera();\n\tcameraR.bounds = new Vector4( 0.5, 0.0, 0.5, 1.0 );\n\tcameraR.layers.enable( 2 );\n\n\tvar cameraVR = new ArrayCamera( [ cameraL, cameraR ] );\n\tcameraVR.layers.enable( 1 );\n\tcameraVR.layers.enable( 2 );\n\n\t//\n\n\tfunction isPresenting() {\n\n\t\treturn device !== null && device.isPresenting === true;\n\n\t}\n\n\tvar currentSize, currentPixelRatio;\n\n\tfunction onVRDisplayPresentChange() {\n\n\t\tif ( isPresenting() ) {\n\n\t\t\tvar eyeParameters = device.getEyeParameters( 'left' );\n\t\t\tvar renderWidth = eyeParameters.renderWidth;\n\t\t\tvar renderHeight = eyeParameters.renderHeight;\n\n\t\t\tcurrentPixelRatio = renderer.getPixelRatio();\n\t\t\tcurrentSize = renderer.getSize();\n\n\t\t\trenderer.setDrawingBufferSize( renderWidth * 2, renderHeight, 1 );\n\n\t\t\tanimation.start();\n\n\t\t} else if ( scope.enabled ) {\n\n\t\t\trenderer.setDrawingBufferSize( currentSize.width, currentSize.height, currentPixelRatio );\n\n\t\t\tanimation.stop();\n\n\t\t}\n\n\t}\n\n\t//\n\n\tvar isTriggerPressed = false;\n\n\tfunction findGamepad( id ) {\n\n\t\tvar gamepads = navigator.getGamepads && navigator.getGamepads();\n\n\t\tfor ( var i = 0, j = 0, l = gamepads.length; i < l; i ++ ) {\n\n\t\t\tvar gamepad = gamepads[ i ];\n\n\t\t\tif ( gamepad && ( gamepad.id === 'Daydream Controller' ||\n\t\t\t\tgamepad.id === 'Gear VR Controller' || gamepad.id === 'Oculus Go Controller' ||\n\t\t\t\tgamepad.id === 'OpenVR Gamepad' || gamepad.id.startsWith( 'Oculus Touch' ) ||\n\t\t\t\tgamepad.id.startsWith( 'Spatial Controller' ) ) ) {\n\n\t\t\t\tif ( j === id ) return gamepad;\n\n\t\t\t\tj ++;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateControllers() {\n\n\t\tfor ( var i = 0; i < controllers.length; i ++ ) {\n\n\t\t\tvar controller = controllers[ i ];\n\n\t\t\tvar gamepad = findGamepad( i );\n\n\t\t\tif ( gamepad !== undefined && gamepad.pose !== undefined ) {\n\n\t\t\t\tif ( gamepad.pose === null ) return;\n\n\t\t\t\t// Pose\n\n\t\t\t\tvar pose = gamepad.pose;\n\n\t\t\t\tif ( pose.hasPosition === false ) controller.position.set( 0.2, - 0.6, - 0.05 );\n\n\t\t\t\tif ( pose.position !== null ) controller.position.fromArray( pose.position );\n\t\t\t\tif ( pose.orientation !== null ) controller.quaternion.fromArray( pose.orientation );\n\t\t\t\tcontroller.matrix.compose( controller.position, controller.quaternion, controller.scale );\n\t\t\t\tcontroller.matrix.premultiply( standingMatrix );\n\t\t\t\tcontroller.matrix.decompose( controller.position, controller.quaternion, controller.scale );\n\t\t\t\tcontroller.matrixWorldNeedsUpdate = true;\n\t\t\t\tcontroller.visible = true;\n\n\t\t\t\t// Trigger\n\n\t\t\t\tvar buttonId = gamepad.id === 'Daydream Controller' ? 0 : 1;\n\n\t\t\t\tif ( isTriggerPressed !== gamepad.buttons[ buttonId ].pressed ) {\n\n\t\t\t\t\tisTriggerPressed = gamepad.buttons[ buttonId ].pressed;\n\n\t\t\t\t\tif ( isTriggerPressed ) {\n\n\t\t\t\t\t\tcontroller.dispatchEvent( { type: 'selectstart' } );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcontroller.dispatchEvent( { type: 'selectend' } );\n\t\t\t\t\t\tcontroller.dispatchEvent( { type: 'select' } );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tcontroller.visible = false;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t//\n\n\tthis.enabled = false;\n\tthis.userHeight = 1.6;\n\n\tthis.getController = function ( id ) {\n\n\t\tvar controller = controllers[ id ];\n\n\t\tif ( controller === undefined ) {\n\n\t\t\tcontroller = new Group();\n\t\t\tcontroller.matrixAutoUpdate = false;\n\t\t\tcontroller.visible = false;\n\n\t\t\tcontrollers[ id ] = controller;\n\n\t\t}\n\n\t\treturn controller;\n\n\t};\n\n\tthis.getDevice = function () {\n\n\t\treturn device;\n\n\t};\n\n\tthis.setDevice = function ( value ) {\n\n\t\tif ( value !== undefined ) device = value;\n\n\t\tanimation.setContext( value );\n\n\t};\n\n\tthis.setPoseTarget = function ( object ) {\n\n\t\tif ( object !== undefined ) poseTarget = object;\n\n\t};\n\n\tthis.getCamera = function ( camera ) {\n\n\t\tif ( device === null ) {\n\n\t\t\tcamera.position.set( 0, scope.userHeight, 0 );\n\t\t\treturn camera;\n\n\t\t}\n\n\t\tdevice.depthNear = camera.near;\n\t\tdevice.depthFar = camera.far;\n\n\t\tdevice.getFrameData( frameData );\n\n\t\t//\n\n\t\tvar stageParameters = device.stageParameters;\n\n\t\tif ( stageParameters ) {\n\n\t\t\tstandingMatrix.fromArray( stageParameters.sittingToStandingTransform );\n\n\t\t} else {\n\n\t\t\tstandingMatrix.makeTranslation( 0, scope.userHeight, 0 );\n\n\t\t}\n\n\n\t\tvar pose = frameData.pose;\n\t\tvar poseObject = poseTarget !== null ? poseTarget : camera;\n\n\t\t// We want to manipulate poseObject by its position and quaternion components since users may rely on them.\n\t\tposeObject.matrix.copy( standingMatrix );\n\t\tposeObject.matrix.decompose( poseObject.position, poseObject.quaternion, poseObject.scale );\n\n\t\tif ( pose.orientation !== null ) {\n\n\t\t\ttempQuaternion.fromArray( pose.orientation );\n\t\t\tposeObject.quaternion.multiply( tempQuaternion );\n\n\t\t}\n\n\t\tif ( pose.position !== null ) {\n\n\t\t\ttempQuaternion.setFromRotationMatrix( standingMatrix );\n\t\t\ttempPosition.fromArray( pose.position );\n\t\t\ttempPosition.applyQuaternion( tempQuaternion );\n\t\t\tposeObject.position.add( tempPosition );\n\n\t\t}\n\n\t\tposeObject.updateMatrixWorld();\n\n\t\tif ( device.isPresenting === false ) return camera;\n\n\t\t//\n\n\t\tcameraL.near = camera.near;\n\t\tcameraR.near = camera.near;\n\n\t\tcameraL.far = camera.far;\n\t\tcameraR.far = camera.far;\n\n\t\tcameraVR.matrixWorld.copy( camera.matrixWorld );\n\t\tcameraVR.matrixWorldInverse.copy( camera.matrixWorldInverse );\n\n\t\tcameraL.matrixWorldInverse.fromArray( frameData.leftViewMatrix );\n\t\tcameraR.matrixWorldInverse.fromArray( frameData.rightViewMatrix );\n\n\t\t// TODO (mrdoob) Double check this code\n\n\t\tstandingMatrixInverse.getInverse( standingMatrix );\n\n\t\tcameraL.matrixWorldInverse.multiply( standingMatrixInverse );\n\t\tcameraR.matrixWorldInverse.multiply( standingMatrixInverse );\n\n\t\tvar parent = poseObject.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tmatrixWorldInverse.getInverse( parent.matrixWorld );\n\n\t\t\tcameraL.matrixWorldInverse.multiply( matrixWorldInverse );\n\t\t\tcameraR.matrixWorldInverse.multiply( matrixWorldInverse );\n\n\t\t}\n\n\t\t// envMap and Mirror needs camera.matrixWorld\n\n\t\tcameraL.matrixWorld.getInverse( cameraL.matrixWorldInverse );\n\t\tcameraR.matrixWorld.getInverse( cameraR.matrixWorldInverse );\n\n\t\tcameraL.projectionMatrix.fromArray( frameData.leftProjectionMatrix );\n\t\tcameraR.projectionMatrix.fromArray( frameData.rightProjectionMatrix );\n\n\t\t// HACK (mrdoob)\n\t\t// https://github.com/w3c/webvr/issues/203\n\n\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t//\n\n\t\tvar layers = device.getLayers();\n\n\t\tif ( layers.length ) {\n\n\t\t\tvar layer = layers[ 0 ];\n\n\t\t\tif ( layer.leftBounds !== null && layer.leftBounds.length === 4 ) {\n\n\t\t\t\tcameraL.bounds.fromArray( layer.leftBounds );\n\n\t\t\t}\n\n\t\t\tif ( layer.rightBounds !== null && layer.rightBounds.length === 4 ) {\n\n\t\t\t\tcameraR.bounds.fromArray( layer.rightBounds );\n\n\t\t\t}\n\n\t\t}\n\n\t\tupdateControllers();\n\n\t\treturn cameraVR;\n\n\t};\n\n\tthis.getStandingMatrix = function () {\n\n\t\treturn standingMatrix;\n\n\t};\n\n\tthis.isPresenting = isPresenting;\n\n\t// Animation Loop\n\n\tvar animation = new WebGLAnimation();\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tanimation.setAnimationLoop( callback );\n\n\t};\n\n\tthis.submitFrame = function () {\n\n\t\tif ( isPresenting() ) device.submitFrame();\n\n\t};\n\n\tthis.dispose = function () {\n\n\t\tif ( typeof window !== 'undefined' ) {\n\n\t\t\twindow.removeEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange );\n\n\t\t}\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebXRManager( renderer ) {\n\n\tvar gl = renderer.context;\n\n\tvar device = null;\n\tvar session = null;\n\n\tvar frameOfRef = null;\n\n\tvar pose = null;\n\n\tvar controllers = [];\n\tvar inputSources = [];\n\n\tfunction isPresenting() {\n\n\t\treturn session !== null && frameOfRef !== null;\n\n\n\t}\n\n\t//\n\n\tvar cameraL = new PerspectiveCamera();\n\tcameraL.layers.enable( 1 );\n\tcameraL.viewport = new Vector4();\n\n\tvar cameraR = new PerspectiveCamera();\n\tcameraR.layers.enable( 2 );\n\tcameraR.viewport = new Vector4();\n\n\tvar cameraVR = new ArrayCamera( [ cameraL, cameraR ] );\n\tcameraVR.layers.enable( 1 );\n\tcameraVR.layers.enable( 2 );\n\n\t//\n\n\tthis.enabled = false;\n\n\tthis.getController = function ( id ) {\n\n\t\tvar controller = controllers[ id ];\n\n\t\tif ( controller === undefined ) {\n\n\t\t\tcontroller = new Group();\n\t\t\tcontroller.matrixAutoUpdate = false;\n\t\t\tcontroller.visible = false;\n\n\t\t\tcontrollers[ id ] = controller;\n\n\t\t}\n\n\t\treturn controller;\n\n\t};\n\n\tthis.getDevice = function () {\n\n\t\treturn device;\n\n\t};\n\n\tthis.setDevice = function ( value ) {\n\n\t\tif ( value !== undefined ) device = value;\n\n\t\tgl.setCompatibleXRDevice( value );\n\n\t};\n\n\t//\n\n\tfunction onSessionEvent( event ) {\n\n\t\tvar controller = controllers[ inputSources.indexOf( event.inputSource ) ];\n\t\tif ( controller ) controller.dispatchEvent( { type: event.type } );\n\n\t}\n\n\tfunction onSessionEnd() {\n\n\t\trenderer.setFramebuffer( null );\n\t\tanimation.stop();\n\n\t}\n\n\tthis.setSession = function ( value, options ) {\n\n\t\tsession = value;\n\n\t\tif ( session !== null ) {\n\n\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\n\t\t\tsession.baseLayer = new XRWebGLLayer( session, gl );\n\t\t\tsession.requestFrameOfReference( options.frameOfReferenceType ).then( function ( value ) {\n\n\t\t\t\tframeOfRef = value;\n\n\t\t\t\trenderer.setFramebuffer( session.baseLayer.framebuffer );\n\n\t\t\t\tanimation.setContext( session );\n\t\t\t\tanimation.start();\n\n\t\t\t} );\n\n\t\t\t//\n\n\t\t\tinputSources = session.getInputSources();\n\n\t\t\tsession.addEventListener( 'inputsourceschange', function () {\n\n\t\t\t\tinputSources = session.getInputSources();\n\t\t\t\tconsole.log( inputSources );\n\n\t\t\t} );\n\n\t\t}\n\n\t};\n\n\tfunction updateCamera( camera, parent ) {\n\n\t\tif ( parent === null ) {\n\n\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t} else {\n\n\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t}\n\n\t\tcamera.matrixWorldInverse.getInverse( camera.matrixWorld );\n\n\t}\n\n\tthis.getCamera = function ( camera ) {\n\n\t\tif ( isPresenting() ) {\n\n\t\t\tvar parent = camera.parent;\n\t\t\tvar cameras = cameraVR.cameras;\n\n\t\t\t// apply camera.parent to cameraVR\n\n\t\t\tupdateCamera( cameraVR, parent );\n\n\t\t\tfor ( var i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t\t}\n\n\t\t\t// update camera and its children\n\n\t\t\tcamera.matrixWorld.copy( cameraVR.matrixWorld );\n\n\t\t\tvar children = camera.children;\n\n\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateMatrixWorld( true );\n\n\t\t\t}\n\n\t\t\treturn cameraVR;\n\n\t\t}\n\n\t\treturn camera;\n\n\t};\n\n\tthis.isPresenting = isPresenting;\n\n\t// Animation Loop\n\n\tvar onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tpose = frame.getDevicePose( frameOfRef );\n\n\t\tif ( pose !== null ) {\n\n\t\t\tvar layer = session.baseLayer;\n\t\t\tvar views = frame.views;\n\n\t\t\tfor ( var i = 0; i < views.length; i ++ ) {\n\n\t\t\t\tvar view = views[ i ];\n\t\t\t\tvar viewport = layer.getViewport( view );\n\t\t\t\tvar viewMatrix = pose.getViewMatrix( view );\n\n\t\t\t\tvar camera = cameraVR.cameras[ i ];\n\t\t\t\tcamera.matrix.fromArray( viewMatrix ).getInverse( camera.matrix );\n\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\tcameraVR.matrix.copy( camera.matrix );\n\n\t\t\t\t\t// HACK (mrdoob)\n\t\t\t\t\t// https://github.com/w3c/webvr/issues/203\n\n\t\t\t\t\tcameraVR.projectionMatrix.copy( camera.projectionMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tfor ( var i = 0; i < controllers.length; i ++ ) {\n\n\t\t\tvar controller = controllers[ i ];\n\n\t\t\tvar inputSource = inputSources[ i ];\n\n\t\t\tif ( inputSource ) {\n\n\t\t\t\tvar inputPose = frame.getInputPose( inputSource, frameOfRef );\n\n\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\tcontroller.matrix.elements = inputPose.pointerMatrix;\n\t\t\t\t\tcontroller.matrix.decompose( controller.position, controller.rotation, controller.scale );\n\t\t\t\t\tcontroller.visible = true;\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tcontroller.visible = false;\n\n\t\t}\n\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t}\n\n\tvar animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tonAnimationFrameCallback = callback;\n\n\t};\n\n\tthis.dispose = function () {};\n\n\t// DEPRECATED\n\n\tthis.getStandingMatrix = function () {\n\n\t\tconsole.warn( 'THREE.WebXRManager: getStandingMatrix() is no longer needed.' );\n\t\treturn new THREE.Matrix4();\n\n\t};\n\n\tthis.submitFrame = function () {};\n\n}\n\n/**\n * @author supereggbert / http://www.paulbrunt.co.uk/\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author szimek / https://github.com/szimek/\n * @author tschw\n */\n\nfunction WebGLRenderer( parameters ) {\n\n\tconsole.log( 'THREE.WebGLRenderer', REVISION );\n\n\tparameters = parameters || {};\n\n\tvar _canvas = parameters.canvas !== undefined ? parameters.canvas : document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ),\n\t\t_context = parameters.context !== undefined ? parameters.context : null,\n\n\t\t_alpha = parameters.alpha !== undefined ? parameters.alpha : false,\n\t\t_depth = parameters.depth !== undefined ? parameters.depth : true,\n\t\t_stencil = parameters.stencil !== undefined ? parameters.stencil : true,\n\t\t_antialias = parameters.antialias !== undefined ? parameters.antialias : false,\n\t\t_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\n\t\t_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,\n\t\t_powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default';\n\n\tvar currentRenderList = null;\n\tvar currentRenderState = null;\n\n\t// public properties\n\n\tthis.domElement = _canvas;\n\tthis.context = null;\n\n\t// clearing\n\n\tthis.autoClear = true;\n\tthis.autoClearColor = true;\n\tthis.autoClearDepth = true;\n\tthis.autoClearStencil = true;\n\n\t// scene graph\n\n\tthis.sortObjects = true;\n\n\t// user-defined clipping\n\n\tthis.clippingPlanes = [];\n\tthis.localClippingEnabled = false;\n\n\t// physically based shading\n\n\tthis.gammaFactor = 2.0;\t// for backwards compatibility\n\tthis.gammaInput = false;\n\tthis.gammaOutput = false;\n\n\t// physical lights\n\n\tthis.physicallyCorrectLights = false;\n\n\t// tone mapping\n\n\tthis.toneMapping = LinearToneMapping;\n\tthis.toneMappingExposure = 1.0;\n\tthis.toneMappingWhitePoint = 1.0;\n\n\t// morphs\n\n\tthis.maxMorphTargets = 8;\n\tthis.maxMorphNormals = 4;\n\n\t// internal properties\n\n\tvar _this = this,\n\n\t\t_isContextLost = false,\n\n\t\t// internal state cache\n\n\t\t_framebuffer = null,\n\n\t\t_currentRenderTarget = null,\n\t\t_currentFramebuffer = null,\n\t\t_currentMaterialId = - 1,\n\t\t_currentGeometryProgram = '',\n\n\t\t_currentCamera = null,\n\t\t_currentArrayCamera = null,\n\n\t\t_currentViewport = new Vector4(),\n\t\t_currentScissor = new Vector4(),\n\t\t_currentScissorTest = null,\n\n\t\t//\n\n\t\t_usedTextureUnits = 0,\n\n\t\t//\n\n\t\t_width = _canvas.width,\n\t\t_height = _canvas.height,\n\n\t\t_pixelRatio = 1,\n\n\t\t_viewport = new Vector4( 0, 0, _width, _height ),\n\t\t_scissor = new Vector4( 0, 0, _width, _height ),\n\t\t_scissorTest = false,\n\n\t\t// frustum\n\n\t\t_frustum = new Frustum(),\n\n\t\t// clipping\n\n\t\t_clipping = new WebGLClipping(),\n\t\t_clippingEnabled = false,\n\t\t_localClippingEnabled = false,\n\n\t\t// camera matrices cache\n\n\t\t_projScreenMatrix = new Matrix4(),\n\n\t\t_vector3 = new Vector3();\n\n\tfunction getTargetPixelRatio() {\n\n\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t}\n\n\t// initialize\n\n\tvar _gl;\n\n\ttry {\n\n\t\tvar contextAttributes = {\n\t\t\talpha: _alpha,\n\t\t\tdepth: _depth,\n\t\t\tstencil: _stencil,\n\t\t\tantialias: _antialias,\n\t\t\tpremultipliedAlpha: _premultipliedAlpha,\n\t\t\tpreserveDrawingBuffer: _preserveDrawingBuffer,\n\t\t\tpowerPreference: _powerPreference\n\t\t};\n\n\t\t// event listeners must be registered before WebGL context is created, see #12753\n\n\t\t_canvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\t_gl = _context || _canvas.getContext( 'webgl', contextAttributes ) || _canvas.getContext( 'experimental-webgl', contextAttributes );\n\n\t\tif ( _gl === null ) {\n\n\t\t\tif ( _canvas.getContext( 'webgl' ) !== null ) {\n\n\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Some experimental-webgl implementations do not have getShaderPrecisionFormat\n\n\t\tif ( _gl.getShaderPrecisionFormat === undefined ) {\n\n\t\t\t_gl.getShaderPrecisionFormat = function () {\n\n\t\t\t\treturn { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };\n\n\t\t\t};\n\n\t\t}\n\n\t} catch ( error ) {\n\n\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\n\t}\n\n\tvar extensions, capabilities, state, info;\n\tvar properties, textures, attributes, geometries, objects;\n\tvar programCache, renderLists, renderStates;\n\n\tvar background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\tvar spriteRenderer;\n\n\tvar utils;\n\n\tfunction initGLContext() {\n\n\t\textensions = new WebGLExtensions( _gl );\n\t\textensions.get( 'WEBGL_depth_texture' );\n\t\textensions.get( 'OES_texture_float' );\n\t\textensions.get( 'OES_texture_float_linear' );\n\t\textensions.get( 'OES_texture_half_float' );\n\t\textensions.get( 'OES_texture_half_float_linear' );\n\t\textensions.get( 'OES_standard_derivatives' );\n\t\textensions.get( 'OES_element_index_uint' );\n\t\textensions.get( 'ANGLE_instanced_arrays' );\n\n\t\tutils = new WebGLUtils( _gl, extensions );\n\n\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\tstate = new WebGLState( _gl, extensions, utils );\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) );\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) );\n\n\t\tinfo = new WebGLInfo( _gl );\n\t\tproperties = new WebGLProperties();\n\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\tattributes = new WebGLAttributes( _gl );\n\t\tgeometries = new WebGLGeometries( _gl, attributes, info );\n\t\tobjects = new WebGLObjects( geometries, info );\n\t\tmorphtargets = new WebGLMorphtargets( _gl );\n\t\tprogramCache = new WebGLPrograms( _this, extensions, capabilities );\n\t\trenderLists = new WebGLRenderLists();\n\t\trenderStates = new WebGLRenderStates();\n\n\t\tbackground = new WebGLBackground( _this, state, objects, _premultipliedAlpha );\n\n\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info );\n\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info );\n\n\t\tspriteRenderer = new WebGLSpriteRenderer( _this, _gl, state, textures, capabilities );\n\n\t\tinfo.programs = programCache.programs;\n\n\t\t_this.context = _gl;\n\t\t_this.capabilities = capabilities;\n\t\t_this.extensions = extensions;\n\t\t_this.properties = properties;\n\t\t_this.renderLists = renderLists;\n\t\t_this.state = state;\n\t\t_this.info = info;\n\n\t}\n\n\tinitGLContext();\n\n\t// vr\n\n\tvar vr = ( 'xr' in navigator ) ? new WebXRManager( _this ) : new WebVRManager( _this );\n\n\tthis.vr = vr;\n\n\t// shadow map\n\n\tvar shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize );\n\n\tthis.shadowMap = shadowMap;\n\n\t// API\n\n\tthis.getContext = function () {\n\n\t\treturn _gl;\n\n\t};\n\n\tthis.getContextAttributes = function () {\n\n\t\treturn _gl.getContextAttributes();\n\n\t};\n\n\tthis.forceContextLoss = function () {\n\n\t\tvar extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.loseContext();\n\n\t};\n\n\tthis.forceContextRestore = function () {\n\n\t\tvar extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.restoreContext();\n\n\t};\n\n\tthis.getPixelRatio = function () {\n\n\t\treturn _pixelRatio;\n\n\t};\n\n\tthis.setPixelRatio = function ( value ) {\n\n\t\tif ( value === undefined ) return;\n\n\t\t_pixelRatio = value;\n\n\t\tthis.setSize( _width, _height, false );\n\n\t};\n\n\tthis.getSize = function () {\n\n\t\treturn {\n\t\t\twidth: _width,\n\t\t\theight: _height\n\t\t};\n\n\t};\n\n\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\tif ( vr.isPresenting() ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_canvas.width = width * _pixelRatio;\n\t\t_canvas.height = height * _pixelRatio;\n\n\t\tif ( updateStyle !== false ) {\n\n\t\t\t_canvas.style.width = width + 'px';\n\t\t\t_canvas.style.height = height + 'px';\n\n\t\t}\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getDrawingBufferSize = function () {\n\n\t\treturn {\n\t\t\twidth: _width * _pixelRatio,\n\t\t\theight: _height * _pixelRatio\n\t\t};\n\n\t};\n\n\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_pixelRatio = pixelRatio;\n\n\t\t_canvas.width = width * pixelRatio;\n\t\t_canvas.height = height * pixelRatio;\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getCurrentViewport = function () {\n\n\t\treturn _currentViewport;\n\n\t};\n\n\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\t_viewport.set( x, _height - y - height, width, height );\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) );\n\n\t};\n\n\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\t_scissor.set( x, _height - y - height, width, height );\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) );\n\n\t};\n\n\tthis.setScissorTest = function ( boolean ) {\n\n\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t};\n\n\t// Clearing\n\n\tthis.getClearColor = function () {\n\n\t\treturn background.getClearColor();\n\n\t};\n\n\tthis.setClearColor = function () {\n\n\t\tbackground.setClearColor.apply( background, arguments );\n\n\t};\n\n\tthis.getClearAlpha = function () {\n\n\t\treturn background.getClearAlpha();\n\n\t};\n\n\tthis.setClearAlpha = function () {\n\n\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t};\n\n\tthis.clear = function ( color, depth, stencil ) {\n\n\t\tvar bits = 0;\n\n\t\tif ( color === undefined || color ) bits |= _gl.COLOR_BUFFER_BIT;\n\t\tif ( depth === undefined || depth ) bits |= _gl.DEPTH_BUFFER_BIT;\n\t\tif ( stencil === undefined || stencil ) bits |= _gl.STENCIL_BUFFER_BIT;\n\n\t\t_gl.clear( bits );\n\n\t};\n\n\tthis.clearColor = function () {\n\n\t\tthis.clear( true, false, false );\n\n\t};\n\n\tthis.clearDepth = function () {\n\n\t\tthis.clear( false, true, false );\n\n\t};\n\n\tthis.clearStencil = function () {\n\n\t\tthis.clear( false, false, true );\n\n\t};\n\n\tthis.clearTarget = function ( renderTarget, color, depth, stencil ) {\n\n\t\tthis.setRenderTarget( renderTarget );\n\t\tthis.clear( color, depth, stencil );\n\n\t};\n\n\t//\n\n\tthis.dispose = function () {\n\n\t\t_canvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\trenderLists.dispose();\n\t\trenderStates.dispose();\n\t\tproperties.dispose();\n\t\tobjects.dispose();\n\n\t\tvr.dispose();\n\n\t\tanimation.stop();\n\n\t};\n\n\t// Events\n\n\tfunction onContextLost( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t_isContextLost = true;\n\n\t}\n\n\tfunction onContextRestore( /* event */ ) {\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t_isContextLost = false;\n\n\t\tinitGLContext();\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tvar material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\tdeallocateMaterial( material );\n\n\t}\n\n\t// Buffer deallocation\n\n\tfunction deallocateMaterial( material ) {\n\n\t\treleaseMaterialProgramReference( material );\n\n\t\tproperties.remove( material );\n\n\t}\n\n\n\tfunction releaseMaterialProgramReference( material ) {\n\n\t\tvar programInfo = properties.get( material ).program;\n\n\t\tmaterial.program = undefined;\n\n\t\tif ( programInfo !== undefined ) {\n\n\t\t\tprogramCache.releaseProgram( programInfo );\n\n\t\t}\n\n\t}\n\n\t// Buffer rendering\n\n\tfunction renderObjectImmediate( object, program, material ) {\n\n\t\tobject.render( function ( object ) {\n\n\t\t\t_this.renderBufferImmediate( object, program, material );\n\n\t\t} );\n\n\t}\n\n\tthis.renderBufferImmediate = function ( object, program, material ) {\n\n\t\tstate.initAttributes();\n\n\t\tvar buffers = properties.get( object );\n\n\t\tif ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer();\n\t\tif ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer();\n\t\tif ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer();\n\t\tif ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer();\n\n\t\tvar programAttributes = program.getAttributes();\n\n\t\tif ( object.hasPositions ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.position );\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.positionArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.position );\n\t\t\t_gl.vertexAttribPointer( programAttributes.position, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasNormals ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.normal );\n\n\t\t\tif ( ! material.isMeshPhongMaterial &&\n\t\t\t\t! material.isMeshStandardMaterial &&\n\t\t\t\t! material.isMeshNormalMaterial &&\n\t\t\t\tmaterial.flatShading === true ) {\n\n\t\t\t\tfor ( var i = 0, l = object.count * 3; i < l; i += 9 ) {\n\n\t\t\t\t\tvar array = object.normalArray;\n\n\t\t\t\t\tvar nx = ( array[ i + 0 ] + array[ i + 3 ] + array[ i + 6 ] ) / 3;\n\t\t\t\t\tvar ny = ( array[ i + 1 ] + array[ i + 4 ] + array[ i + 7 ] ) / 3;\n\t\t\t\t\tvar nz = ( array[ i + 2 ] + array[ i + 5 ] + array[ i + 8 ] ) / 3;\n\n\t\t\t\t\tarray[ i + 0 ] = nx;\n\t\t\t\t\tarray[ i + 1 ] = ny;\n\t\t\t\t\tarray[ i + 2 ] = nz;\n\n\t\t\t\t\tarray[ i + 3 ] = nx;\n\t\t\t\t\tarray[ i + 4 ] = ny;\n\t\t\t\t\tarray[ i + 5 ] = nz;\n\n\t\t\t\t\tarray[ i + 6 ] = nx;\n\t\t\t\t\tarray[ i + 7 ] = ny;\n\t\t\t\t\tarray[ i + 8 ] = nz;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.normalArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.normal );\n\n\t\t\t_gl.vertexAttribPointer( programAttributes.normal, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasUvs && material.map ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.uv );\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.uvArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.uv );\n\n\t\t\t_gl.vertexAttribPointer( programAttributes.uv, 2, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasColors && material.vertexColors !== NoColors ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.color );\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.colorArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.color );\n\n\t\t\t_gl.vertexAttribPointer( programAttributes.color, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tstate.disableUnusedAttributes();\n\n\t\t_gl.drawArrays( _gl.TRIANGLES, 0, object.count );\n\n\t\tobject.count = 0;\n\n\t};\n\n\tthis.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) {\n\n\t\tvar frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\tvar program = setProgram( camera, fog, material, object );\n\t\tvar geometryProgram = geometry.id + '_' + program.id + '_' + ( material.wireframe === true );\n\n\t\tvar updateBuffers = false;\n\n\t\tif ( geometryProgram !== _currentGeometryProgram ) {\n\n\t\t\t_currentGeometryProgram = geometryProgram;\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\tmorphtargets.update( object, geometry, material, program );\n\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\t//\n\n\t\tvar index = geometry.index;\n\t\tvar position = geometry.attributes.position;\n\t\tvar rangeFactor = 1;\n\n\t\tif ( material.wireframe === true ) {\n\n\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\t\t\trangeFactor = 2;\n\n\t\t}\n\n\t\tvar attribute;\n\t\tvar renderer = bufferRenderer;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattribute = attributes.get( index );\n\n\t\t\trenderer = indexedBufferRenderer;\n\t\t\trenderer.setIndex( attribute );\n\n\t\t}\n\n\t\tif ( updateBuffers ) {\n\n\t\t\tsetupVertexAttributes( material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\t_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, attribute.buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tvar dataCount = Infinity;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdataCount = index.count;\n\n\t\t} else if ( position !== undefined ) {\n\n\t\t\tdataCount = position.count;\n\n\t\t}\n\n\t\tvar rangeStart = geometry.drawRange.start * rangeFactor;\n\t\tvar rangeCount = geometry.drawRange.count * rangeFactor;\n\n\t\tvar groupStart = group !== null ? group.start * rangeFactor : 0;\n\t\tvar groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\n\t\tvar drawStart = Math.max( rangeStart, groupStart );\n\t\tvar drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\n\n\t\tvar drawCount = Math.max( 0, drawEnd - drawStart + 1 );\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\t//\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t} else {\n\n\t\t\t\tswitch ( object.drawMode ) {\n\n\t\t\t\t\tcase TrianglesDrawMode:\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TriangleStripDrawMode:\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLE_STRIP );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TriangleFanDrawMode:\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLE_FAN );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t} else if ( object.isLine ) {\n\n\t\t\tvar lineWidth = material.linewidth;\n\n\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\trenderer.setMode( _gl.LINE_LOOP );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( _gl.LINE_STRIP );\n\n\t\t\t}\n\n\t\t} else if ( object.isPoints ) {\n\n\t\t\trenderer.setMode( _gl.POINTS );\n\n\t\t}\n\n\t\tif ( geometry && geometry.isInstancedBufferGeometry ) {\n\n\t\t\tif ( geometry.maxInstancedCount > 0 ) {\n\n\t\t\t\trenderer.renderInstances( geometry, drawStart, drawCount );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t}\n\n\t};\n\n\tfunction setupVertexAttributes( material, program, geometry ) {\n\n\t\tif ( geometry && geometry.isInstancedBufferGeometry ) {\n\n\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.initAttributes();\n\n\t\tvar geometryAttributes = geometry.attributes;\n\n\t\tvar programAttributes = program.getAttributes();\n\n\t\tvar materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( var name in programAttributes ) {\n\n\t\t\tvar programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute >= 0 ) {\n\n\t\t\t\tvar geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tvar normalized = geometryAttribute.normalized;\n\t\t\t\t\tvar size = geometryAttribute.itemSize;\n\n\t\t\t\t\tvar attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tvar buffer = attribute.buffer;\n\t\t\t\t\tvar type = attribute.type;\n\t\t\t\t\tvar bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tvar data = geometryAttribute.data;\n\t\t\t\t\t\tvar stride = data.stride;\n\t\t\t\t\t\tvar offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data && data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tstate.enableAttributeAndDivisor( programAttribute, data.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry.maxInstancedCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry.maxInstancedCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.enableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );\n\t\t\t\t\t\t_gl.vertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tstate.enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry.maxInstancedCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry.maxInstancedCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.enableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );\n\t\t\t\t\t\t_gl.vertexAttribPointer( programAttribute, size, type, normalized, 0, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tvar value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib2fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib3fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib4fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib1fv( programAttribute, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.disableUnusedAttributes();\n\n\t}\n\n\t// Compile\n\n\tthis.compile = function ( scene, camera ) {\n\n\t\tcurrentRenderState = renderStates.get( scene, camera );\n\t\tcurrentRenderState.init();\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tif ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tcurrentRenderState.setupLights( camera );\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tif ( object.material ) {\n\n\t\t\t\tif ( Array.isArray( object.material ) ) {\n\n\t\t\t\t\tfor ( var i = 0; i < object.material.length; i ++ ) {\n\n\t\t\t\t\t\tinitMaterial( object.material[ i ], scene.fog, object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tinitMaterial( object.material, scene.fog, object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t};\n\n\t// Animation Loop\n\n\tvar onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time ) {\n\n\t\tif ( vr.isPresenting() ) return;\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t}\n\n\tvar animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tif ( typeof window !== 'undefined' ) animation.setContext( window );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tonAnimationFrameCallback = callback;\n\t\tvr.setAnimationLoop( callback );\n\n\t\tanimation.start();\n\n\t};\n\n\t// Rendering\n\n\tthis.render = function ( scene, camera, renderTarget, forceClear ) {\n\n\t\tif ( ! ( camera && camera.isCamera ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( _isContextLost ) return;\n\n\t\t// reset caching for this frame\n\n\t\t_currentGeometryProgram = '';\n\t\t_currentMaterialId = - 1;\n\t\t_currentCamera = null;\n\n\t\t// update scene graph\n\n\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t// update camera matrices and frustum\n\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\tif ( vr.enabled ) {\n\n\t\t\tcamera = vr.getCamera( camera );\n\n\t\t}\n\n\t\t//\n\n\t\tcurrentRenderState = renderStates.get( scene, camera );\n\t\tcurrentRenderState.init();\n\n\t\tscene.onBeforeRender( _this, scene, camera, renderTarget );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t_frustum.setFromMatrix( _projScreenMatrix );\n\n\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t_clippingEnabled = _clipping.init( this.clippingPlanes, _localClippingEnabled, camera );\n\n\t\tcurrentRenderList = renderLists.get( scene, camera );\n\t\tcurrentRenderList.init();\n\n\t\tprojectObject( scene, camera, _this.sortObjects );\n\n\t\tif ( _this.sortObjects === true ) {\n\n\t\t\tcurrentRenderList.sort();\n\n\t\t}\n\n\t\t//\n\n\t\tif ( _clippingEnabled ) _clipping.beginShadows();\n\n\t\tvar shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\tcurrentRenderState.setupLights( camera );\n\n\t\tif ( _clippingEnabled ) _clipping.endShadows();\n\n\t\t//\n\n\t\tif ( this.info.autoReset ) this.info.reset();\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\trenderTarget = null;\n\n\t\t}\n\n\t\tthis.setRenderTarget( renderTarget );\n\n\t\t//\n\n\t\tbackground.render( currentRenderList, scene, camera, forceClear );\n\n\t\t// render scene\n\n\t\tvar opaqueObjects = currentRenderList.opaque;\n\t\tvar transparentObjects = currentRenderList.transparent;\n\n\t\tif ( scene.overrideMaterial ) {\n\n\t\t\tvar overrideMaterial = scene.overrideMaterial;\n\n\t\t\tif ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera, overrideMaterial );\n\t\t\tif ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera, overrideMaterial );\n\n\t\t} else {\n\n\t\t\t// opaque pass (front-to-back order)\n\n\t\t\tif ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera );\n\n\t\t\t// transparent pass (back-to-front order)\n\n\t\t\tif ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera );\n\n\t\t}\n\n\t\t// custom renderers\n\n\t\tvar spritesArray = currentRenderState.state.spritesArray;\n\n\t\tspriteRenderer.render( spritesArray, scene, camera );\n\n\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\tif ( renderTarget ) {\n\n\t\t\ttextures.updateRenderTargetMipmap( renderTarget );\n\n\t\t}\n\n\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\tstate.buffers.depth.setTest( true );\n\t\tstate.buffers.depth.setMask( true );\n\t\tstate.buffers.color.setMask( true );\n\n\t\tstate.setPolygonOffset( false );\n\n\t\tscene.onAfterRender( _this, scene, camera );\n\n\t\tif ( vr.enabled ) {\n\n\t\t\tvr.submitFrame();\n\n\t\t}\n\n\t\t// _gl.finish();\n\n\t\tcurrentRenderList = null;\n\t\tcurrentRenderState = null;\n\n\t};\n\n\t/*\n\t// TODO Duplicated code (Frustum)\n\n\tvar _sphere = new Sphere();\n\n\tfunction isObjectViewable( object ) {\n\n\t\tvar geometry = object.geometry;\n\n\t\tif ( geometry.boundingSphere === null )\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere ).\n\t\tapplyMatrix4( object.matrixWorld );\n\n\t\treturn isSphereViewable( _sphere );\n\n\t}\n\n\tfunction isSpriteViewable( sprite ) {\n\n\t\t_sphere.center.set( 0, 0, 0 );\n\t\t_sphere.radius = 0.7071067811865476;\n\t\t_sphere.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn isSphereViewable( _sphere );\n\n\t}\n\n\tfunction isSphereViewable( sphere ) {\n\n\t\tif ( ! _frustum.intersectsSphere( sphere ) ) return false;\n\n\t\tvar numPlanes = _clipping.numPlanes;\n\n\t\tif ( numPlanes === 0 ) return true;\n\n\t\tvar planes = _this.clippingPlanes,\n\n\t\t\tcenter = sphere.center,\n\t\t\tnegRad = - sphere.radius,\n\t\t\ti = 0;\n\n\t\tdo {\n\n\t\t\t// out when deeper than radius in the negative halfspace\n\t\t\tif ( planes[ i ].distanceToPoint( center ) < negRad ) return false;\n\n\t\t} while ( ++ i !== numPlanes );\n\n\t\treturn true;\n\n\t}\n\t*/\n\n\tfunction projectObject( object, camera, sortObjects ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tvar visible = object.layers.test( camera.layers );\n\n\t\tif ( visible ) {\n\n\t\t\tif ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\tcurrentRenderState.pushSprite( object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isImmediateRenderObject ) {\n\n\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t}\n\n\t\t\t\tcurrentRenderList.push( object, null, object.material, _vector3.z, null );\n\n\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\tobject.skeleton.update();\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar geometry = objects.update( object );\n\t\t\t\t\tvar material = object.material;\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tvar groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( var i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tvar group = groups[ i ];\n\t\t\t\t\t\t\tvar groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, _vector3.z, group );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tprojectObject( children[ i ], camera, sortObjects );\n\n\t\t}\n\n\t}\n\n\tfunction renderObjects( renderList, scene, camera, overrideMaterial ) {\n\n\t\tfor ( var i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\tvar renderItem = renderList[ i ];\n\n\t\t\tvar object = renderItem.object;\n\t\t\tvar geometry = renderItem.geometry;\n\t\t\tvar material = overrideMaterial === undefined ? renderItem.material : overrideMaterial;\n\t\t\tvar group = renderItem.group;\n\n\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\t_currentArrayCamera = camera;\n\n\t\t\t\tvar cameras = camera.cameras;\n\n\t\t\t\tfor ( var j = 0, jl = cameras.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar camera2 = cameras[ j ];\n\n\t\t\t\t\tif ( object.layers.test( camera2.layers ) ) {\n\n\t\t\t\t\t\tif ( 'viewport' in camera2 ) { // XR\n\n\t\t\t\t\t\t\tstate.viewport( _currentViewport.copy( camera2.viewport ) );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvar bounds = camera2.bounds;\n\n\t\t\t\t\t\t\tvar x = bounds.x * _width;\n\t\t\t\t\t\t\tvar y = bounds.y * _height;\n\t\t\t\t\t\t\tvar width = bounds.z * _width;\n\t\t\t\t\t\t\tvar height = bounds.w * _height;\n\n\t\t\t\t\t\t\tstate.viewport( _currentViewport.set( x, y, width, height ).multiplyScalar( _pixelRatio ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trenderObject( object, scene, camera2, geometry, material, group );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_currentArrayCamera = null;\n\n\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\t\tcurrentRenderState = renderStates.get( scene, _currentArrayCamera || camera );\n\n\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\tif ( object.isImmediateRenderObject ) {\n\n\t\t\tvar frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t\tvar program = setProgram( camera, scene.fog, material, object );\n\n\t\t\t_currentGeometryProgram = '';\n\n\t\t\trenderObjectImmediate( object, program, material );\n\n\t\t} else {\n\n\t\t\t_this.renderBufferDirect( camera, scene.fog, geometry, material, object, group );\n\n\t\t}\n\n\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\t\tcurrentRenderState = renderStates.get( scene, _currentArrayCamera || camera );\n\n\t}\n\n\tfunction initMaterial( material, fog, object ) {\n\n\t\tvar materialProperties = properties.get( material );\n\n\t\tvar lights = currentRenderState.state.lights;\n\t\tvar shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tvar parameters = programCache.getParameters(\n\t\t\tmaterial, lights.state, shadowsArray, fog, _clipping.numPlanes, _clipping.numIntersection, object );\n\n\t\tvar code = programCache.getProgramCode( material, parameters );\n\n\t\tvar program = materialProperties.program;\n\t\tvar programChange = true;\n\n\t\tif ( program === undefined ) {\n\n\t\t\t// new material\n\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t} else if ( program.code !== code ) {\n\n\t\t\t// changed glsl or parameters\n\t\t\treleaseMaterialProgramReference( material );\n\n\t\t} else if ( materialProperties.lightsHash !== lights.state.hash ) {\n\n\t\t\tproperties.update( material, 'lightsHash', lights.state.hash );\n\t\t\tprogramChange = false;\n\n\t\t} else if ( parameters.shaderID !== undefined ) {\n\n\t\t\t// same glsl and uniform list\n\t\t\treturn;\n\n\t\t} else {\n\n\t\t\t// only rebuild uniform list\n\t\t\tprogramChange = false;\n\n\t\t}\n\n\t\tif ( programChange ) {\n\n\t\t\tif ( parameters.shaderID ) {\n\n\t\t\t\tvar shader = ShaderLib[ parameters.shaderID ];\n\n\t\t\t\tmaterialProperties.shader = {\n\t\t\t\t\tname: material.type,\n\t\t\t\t\tuniforms: UniformsUtils.clone( shader.uniforms ),\n\t\t\t\t\tvertexShader: shader.vertexShader,\n\t\t\t\t\tfragmentShader: shader.fragmentShader\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tmaterialProperties.shader = {\n\t\t\t\t\tname: material.type,\n\t\t\t\t\tuniforms: material.uniforms,\n\t\t\t\t\tvertexShader: material.vertexShader,\n\t\t\t\t\tfragmentShader: material.fragmentShader\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tmaterial.onBeforeCompile( materialProperties.shader, _this );\n\n\t\t\tprogram = programCache.acquireProgram( material, materialProperties.shader, parameters, code );\n\n\t\t\tmaterialProperties.program = program;\n\t\t\tmaterial.program = program;\n\n\t\t}\n\n\t\tvar programAttributes = program.getAttributes();\n\n\t\tif ( material.morphTargets ) {\n\n\t\t\tmaterial.numSupportedMorphTargets = 0;\n\n\t\t\tfor ( var i = 0; i < _this.maxMorphTargets; i ++ ) {\n\n\t\t\t\tif ( programAttributes[ 'morphTarget' + i ] >= 0 ) {\n\n\t\t\t\t\tmaterial.numSupportedMorphTargets ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.morphNormals ) {\n\n\t\t\tmaterial.numSupportedMorphNormals = 0;\n\n\t\t\tfor ( var i = 0; i < _this.maxMorphNormals; i ++ ) {\n\n\t\t\t\tif ( programAttributes[ 'morphNormal' + i ] >= 0 ) {\n\n\t\t\t\t\tmaterial.numSupportedMorphNormals ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar uniforms = materialProperties.shader.uniforms;\n\n\t\tif ( ! material.isShaderMaterial &&\n\t\t\t! material.isRawShaderMaterial ||\n\t\t\tmaterial.clipping === true ) {\n\n\t\t\tmaterialProperties.numClippingPlanes = _clipping.numPlanes;\n\t\t\tmaterialProperties.numIntersection = _clipping.numIntersection;\n\t\t\tuniforms.clippingPlanes = _clipping.uniform;\n\n\t\t}\n\n\t\tmaterialProperties.fog = fog;\n\n\t\t// store the light setup it was created for\n\n\t\tmaterialProperties.lightsHash = lights.state.hash;\n\n\t\tif ( material.lights ) {\n\n\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\tuniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix;\n\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t}\n\n\t\tvar progUniforms = materialProperties.program.getUniforms(),\n\t\t\tuniformsList =\n\t\t\t\tWebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\n\n\t\tmaterialProperties.uniformsList = uniformsList;\n\n\t}\n\n\tfunction setProgram( camera, fog, material, object ) {\n\n\t\t_usedTextureUnits = 0;\n\n\t\tvar materialProperties = properties.get( material );\n\t\tvar lights = currentRenderState.state.lights;\n\n\t\tif ( _clippingEnabled ) {\n\n\t\t\tif ( _localClippingEnabled || camera !== _currentCamera ) {\n\n\t\t\t\tvar useCache =\n\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t// (#8465, #8379)\n\t\t\t\t_clipping.setState(\n\t\t\t\t\tmaterial.clippingPlanes, material.clipIntersection, material.clipShadows,\n\t\t\t\t\tcamera, materialProperties, useCache );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.needsUpdate === false ) {\n\n\t\t\tif ( materialProperties.program === undefined ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t} else if ( material.fog && materialProperties.fog !== fog ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t} else if ( material.lights && materialProperties.lightsHash !== lights.state.hash ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t( materialProperties.numClippingPlanes !== _clipping.numPlanes ||\n\t\t\t\tmaterialProperties.numIntersection !== _clipping.numIntersection ) ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.needsUpdate ) {\n\n\t\t\tinitMaterial( material, fog, object );\n\t\t\tmaterial.needsUpdate = false;\n\n\t\t}\n\n\t\tvar refreshProgram = false;\n\t\tvar refreshMaterial = false;\n\t\tvar refreshLights = false;\n\n\t\tvar program = materialProperties.program,\n\t\t\tp_uniforms = program.getUniforms(),\n\t\t\tm_uniforms = materialProperties.shader.uniforms;\n\n\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\trefreshProgram = true;\n\t\t\trefreshMaterial = true;\n\t\t\trefreshLights = true;\n\n\t\t}\n\n\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t_currentMaterialId = material.id;\n\n\t\t\trefreshMaterial = true;\n\n\t\t}\n\n\t\tif ( refreshProgram || camera !== _currentCamera ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\n\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t}\n\n\t\t\t// Avoid unneeded uniform updates per ArrayCamera's sub-camera\n\n\t\t\tif ( _currentCamera !== ( _currentArrayCamera || camera ) ) {\n\n\t\t\t\t_currentCamera = ( _currentArrayCamera || camera );\n\n\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t}\n\n\t\t\t// load material specific uniforms\n\t\t\t// (shader material also gets them for the sake of genericity)\n\n\t\t\tif ( material.isShaderMaterial ||\n\t\t\t\tmaterial.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.envMap ) {\n\n\t\t\t\tvar uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl,\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ||\n\t\t\t\tmaterial.skinning ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// skinning uniforms must be set even if material didn't change\n\t\t// auto-setting of texture unit for bone texture must go before other textures\n\t\t// not sure why, but otherwise weird things happen\n\n\t\tif ( material.skinning ) {\n\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\tvar skeleton = object.skeleton;\n\n\t\t\tif ( skeleton ) {\n\n\t\t\t\tvar bones = skeleton.bones;\n\n\t\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === undefined ) {\n\n\t\t\t\t\t\t// layout (1 matrix = 4 pixels)\n\t\t\t\t\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t\t\t\t\t// with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8)\n\t\t\t\t\t\t// 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16)\n\t\t\t\t\t\t// 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32)\n\t\t\t\t\t\t// 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\n\t\t\t\t\t\tvar size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\t\t\t\t\tsize = _Math.ceilPowerOfTwo( size );\n\t\t\t\t\t\tsize = Math.max( size, 4 );\n\n\t\t\t\t\t\tvar boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\t\t\t\t\tboneMatrices.set( skeleton.boneMatrices ); // copy current values\n\n\t\t\t\t\t\tvar boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\t\t\t\t\t\tboneTexture.needsUpdate = true;\n\n\t\t\t\t\t\tskeleton.boneMatrices = boneMatrices;\n\t\t\t\t\t\tskeleton.boneTexture = boneTexture;\n\t\t\t\t\t\tskeleton.boneTextureSize = size;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture );\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tp_uniforms.setOptional( _gl, skeleton, 'boneMatrices' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( refreshMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingWhitePoint', _this.toneMappingWhitePoint );\n\n\t\t\tif ( material.lights ) {\n\n\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t// values\n\t\t\t\t//\n\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t// the GL state when required\n\n\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t}\n\n\t\t\t// refresh uniforms common to several materials\n\n\t\t\tif ( fog && material.fog ) {\n\n\t\t\t\trefreshUniformsFog( m_uniforms, fog );\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsLambert( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t\tif ( material.isMeshToonMaterial ) {\n\n\t\t\t\t\trefreshUniformsToon( m_uniforms, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trefreshUniformsPhong( m_uniforms, material );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\t\trefreshUniformsPhysical( m_uniforms, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trefreshUniformsStandard( m_uniforms, material );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsDepth( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsDistance( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsNormal( m_uniforms, material );\n\n\t\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\t\trefreshUniformsLine( m_uniforms, material );\n\n\t\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\t\trefreshUniformsDash( m_uniforms, material );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\t\trefreshUniformsPoints( m_uniforms, material );\n\n\t\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\t\tm_uniforms.color.value = material.color;\n\t\t\t\tm_uniforms.opacity.value = material.opacity;\n\n\t\t\t}\n\n\t\t\t// RectAreaLight Texture\n\t\t\t// TODO (mrdoob): Find a nicer implementation\n\n\t\t\tif ( m_uniforms.ltc_1 !== undefined ) m_uniforms.ltc_1.value = UniformsLib.LTC_1;\n\t\t\tif ( m_uniforms.ltc_2 !== undefined ) m_uniforms.ltc_2.value = UniformsLib.LTC_2;\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, _this );\n\n\t\t}\n\n\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, _this );\n\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t}\n\n\t\t// common matrices\n\n\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\treturn program;\n\n\t}\n\n\t// Uniforms (refresh uniforms objects)\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value = material.color;\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t}\n\n\t\tif ( material.envMap ) {\n\n\t\t\tuniforms.envMap.value = material.envMap;\n\n\t\t\t// don't flip CubeTexture envMaps, flip everything else:\n\t\t\t// WebGLRenderTargetCube will be flipped for backwards compatibility\n\t\t\t// WebGLRenderTargetCube.texture will be flipped because it's a Texture and NOT a CubeTexture\n\t\t\t// this check must be handled differently, or removed entirely, if WebGLRenderTargetCube uses a CubeTexture in the future\n\t\t\tuniforms.flipEnvMap.value = ( ! ( material.envMap && material.envMap.isCubeTexture ) ) ? 1 : - 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\tuniforms.maxMipLevel.value = properties.get( material.envMap ).__maxMipLevel;\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. specular map\n\t\t// 3. normal map\n\t\t// 4. bump map\n\t\t// 5. alpha map\n\t\t// 6. emissive map\n\n\t\tvar uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.specularMap ) {\n\n\t\t\tuvScaleMap = material.specularMap;\n\n\t\t} else if ( material.displacementMap ) {\n\n\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t} else if ( material.normalMap ) {\n\n\t\t\tuvScaleMap = material.normalMap;\n\n\t\t} else if ( material.bumpMap ) {\n\n\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t} else if ( material.roughnessMap ) {\n\n\t\t\tuvScaleMap = material.roughnessMap;\n\n\t\t} else if ( material.metalnessMap ) {\n\n\t\t\tuvScaleMap = material.metalnessMap;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t} else if ( material.emissiveMap ) {\n\n\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value = material.color;\n\t\tuniforms.opacity.value = material.opacity;\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material ) {\n\n\t\tuniforms.diffuse.value = material.color;\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * _pixelRatio;\n\t\tuniforms.scale.value = _height * 0.5;\n\n\t\tuniforms.map.value = material.map;\n\n\t\tif ( material.map !== null ) {\n\n\t\t\tif ( material.map.matrixAutoUpdate === true ) {\n\n\t\t\t\tmaterial.map.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( material.map.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsFog( uniforms, fog ) {\n\n\t\tuniforms.fogColor.value = fog.color;\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLambert( uniforms, material ) {\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value = material.specular;\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\trefreshUniformsPhong( uniforms, material );\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.roughness.value = material.roughness;\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t}\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tif ( material.envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material ) {\n\n\t\trefreshUniformsStandard( uniforms, material );\n\n\t\tuniforms.reflectivity.value = material.reflectivity; // also part of uniforms common\n\n\t\tuniforms.clearCoat.value = material.clearCoat;\n\t\tuniforms.clearCoatRoughness.value = material.clearCoatRoughness;\n\n\t}\n\n\tfunction refreshUniformsDepth( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tuniforms.referencePosition.value.copy( material.referencePosition );\n\t\tuniforms.nearDistance.value = material.nearDistance;\n\t\tuniforms.farDistance.value = material.farDistance;\n\n\t}\n\n\tfunction refreshUniformsNormal( uniforms, material ) {\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\tuniforms.ambientLightColor.needsUpdate = value;\n\n\t\tuniforms.directionalLights.needsUpdate = value;\n\t\tuniforms.pointLights.needsUpdate = value;\n\t\tuniforms.spotLights.needsUpdate = value;\n\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t}\n\n\t// Textures\n\n\tfunction allocTextureUnit() {\n\n\t\tvar textureUnit = _usedTextureUnits;\n\n\t\tif ( textureUnit >= capabilities.maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures );\n\n\t\t}\n\n\t\t_usedTextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\tthis.allocTextureUnit = allocTextureUnit;\n\n\t// this.setTexture2D = setTexture2D;\n\tthis.setTexture2D = ( function () {\n\n\t\tvar warned = false;\n\n\t\t// backwards compatibility: peel texture.texture\n\t\treturn function setTexture2D( texture, slot ) {\n\n\t\t\tif ( texture && texture.isWebGLRenderTarget ) {\n\n\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead.\" );\n\t\t\t\t\twarned = true;\n\n\t\t\t\t}\n\n\t\t\t\ttexture = texture.texture;\n\n\t\t\t}\n\n\t\t\ttextures.setTexture2D( texture, slot );\n\n\t\t};\n\n\t}() );\n\n\tthis.setTexture = ( function () {\n\n\t\tvar warned = false;\n\n\t\treturn function setTexture( texture, slot ) {\n\n\t\t\tif ( ! warned ) {\n\n\t\t\t\tconsole.warn( \"THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead.\" );\n\t\t\t\twarned = true;\n\n\t\t\t}\n\n\t\t\ttextures.setTexture2D( texture, slot );\n\n\t\t};\n\n\t}() );\n\n\tthis.setTextureCube = ( function () {\n\n\t\tvar warned = false;\n\n\t\treturn function setTextureCube( texture, slot ) {\n\n\t\t\t// backwards compatibility: peel texture.texture\n\t\t\tif ( texture && texture.isWebGLRenderTargetCube ) {\n\n\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead.\" );\n\t\t\t\t\twarned = true;\n\n\t\t\t\t}\n\n\t\t\t\ttexture = texture.texture;\n\n\t\t\t}\n\n\t\t\t// currently relying on the fact that WebGLRenderTargetCube.texture is a Texture and NOT a CubeTexture\n\t\t\t// TODO: unify these code paths\n\t\t\tif ( ( texture && texture.isCubeTexture ) ||\n\t\t\t\t( Array.isArray( texture.image ) && texture.image.length === 6 ) ) {\n\n\t\t\t\t// CompressedTexture can have Array in image :/\n\n\t\t\t\t// this function alone should take care of cube textures\n\t\t\t\ttextures.setTextureCube( texture, slot );\n\n\t\t\t} else {\n\n\t\t\t\t// assumed: texture property of THREE.WebGLRenderTargetCube\n\n\t\t\t\ttextures.setTextureCubeDynamic( texture, slot );\n\n\t\t\t}\n\n\t\t};\n\n\t}() );\n\n\t//\n\n\tthis.setFramebuffer = function ( value ) {\n\n\t\t_framebuffer = value;\n\n\t};\n\n\tthis.getRenderTarget = function () {\n\n\t\treturn _currentRenderTarget;\n\n\t};\n\n\tthis.setRenderTarget = function ( renderTarget ) {\n\n\t\t_currentRenderTarget = renderTarget;\n\n\t\tif ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {\n\n\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t}\n\n\t\tvar framebuffer = _framebuffer;\n\t\tvar isCube = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tvar __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLRenderTargetCube ) {\n\n\t\t\t\tframebuffer = __webglFramebuffer[ renderTarget.activeCubeFace ];\n\t\t\t\tisCube = true;\n\n\t\t\t} else {\n\n\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t}\n\n\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t} else {\n\n\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio );\n\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio );\n\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t}\n\n\t\tif ( _currentFramebuffer !== framebuffer ) {\n\n\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\t\t\t_currentFramebuffer = framebuffer;\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport );\n\t\tstate.scissor( _currentScissor );\n\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\tif ( isCube ) {\n\n\t\t\tvar textureProperties = properties.get( renderTarget.texture );\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + renderTarget.activeCubeFace, textureProperties.__webglTexture, renderTarget.activeMipMapLevel );\n\n\t\t}\n\n\t};\n\n\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer ) {\n\n\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\tif ( framebuffer ) {\n\n\t\t\tvar restore = false;\n\n\t\t\tif ( framebuffer !== _currentFramebuffer ) {\n\n\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\trestore = true;\n\n\t\t\t}\n\n\t\t\ttry {\n\n\t\t\t\tvar texture = renderTarget.texture;\n\t\t\t\tvar textureFormat = texture.format;\n\t\t\t\tvar textureType = texture.type;\n\n\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // IE11, Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t! ( textureType === FloatType && ( extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t! ( textureType === HalfFloatType && extensions.get( 'EXT_color_buffer_half_float' ) ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _gl.checkFramebufferStatus( _gl.FRAMEBUFFER ) === _gl.FRAMEBUFFER_COMPLETE ) {\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' );\n\n\t\t\t\t}\n\n\t\t\t} finally {\n\n\t\t\t\tif ( restore ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, _currentFramebuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.copyFramebufferToTexture = function ( position, texture, level ) {\n\n\t\tvar width = texture.image.width;\n\t\tvar height = texture.image.height;\n\t\tvar glFormat = utils.convert( texture.format );\n\n\t\tthis.setTexture2D( texture, 0 );\n\n\t\t_gl.copyTexImage2D( _gl.TEXTURE_2D, level || 0, glFormat, position.x, position.y, width, height, 0 );\n\n\t};\n\n\tthis.copyTextureToTexture = function ( position, srcTexture, dstTexture, level ) {\n\n\t\tvar width = srcTexture.image.width;\n\t\tvar height = srcTexture.image.height;\n\t\tvar glFormat = utils.convert( dstTexture.format );\n\t\tvar glType = utils.convert( dstTexture.type );\n\n\t\tthis.setTexture2D( dstTexture, 0 );\n\n\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level || 0, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data );\n\n\t\t} else {\n\n\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level || 0, position.x, position.y, glFormat, glType, srcTexture.image );\n\n\t\t}\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction FogExp2( color, density ) {\n\n\tthis.name = '';\n\n\tthis.color = new Color( color );\n\tthis.density = ( density !== undefined ) ? density : 0.00025;\n\n}\n\nFogExp2.prototype.isFogExp2 = true;\n\nFogExp2.prototype.clone = function () {\n\n\treturn new FogExp2( this.color, this.density );\n\n};\n\nFogExp2.prototype.toJSON = function ( /* meta */ ) {\n\n\treturn {\n\t\ttype: 'FogExp2',\n\t\tcolor: this.color.getHex(),\n\t\tdensity: this.density\n\t};\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Fog( color, near, far ) {\n\n\tthis.name = '';\n\n\tthis.color = new Color( color );\n\n\tthis.near = ( near !== undefined ) ? near : 1;\n\tthis.far = ( far !== undefined ) ? far : 1000;\n\n}\n\nFog.prototype.isFog = true;\n\nFog.prototype.clone = function () {\n\n\treturn new Fog( this.color, this.near, this.far );\n\n};\n\nFog.prototype.toJSON = function ( /* meta */ ) {\n\n\treturn {\n\t\ttype: 'Fog',\n\t\tcolor: this.color.getHex(),\n\t\tnear: this.near,\n\t\tfar: this.far\n\t};\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Scene() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Scene';\n\n\tthis.background = null;\n\tthis.fog = null;\n\tthis.overrideMaterial = null;\n\n\tthis.autoUpdate = true; // checked by the renderer\n\n}\n\nScene.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Scene,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tObject3D.prototype.copy.call( this, source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tif ( this.background !== null ) data.object.background = this.background.toJSON( meta );\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: <hex>,\n * opacity: <float>,\n * map: new THREE.Texture( <Image> ),\n *\n *\tuvOffset: new THREE.Vector2(),\n *\tuvScale: new THREE.Vector2()\n * }\n */\n\nfunction SpriteMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'SpriteMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\tthis.map = null;\n\n\tthis.rotation = 0;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nSpriteMaterial.prototype = Object.create( Material.prototype );\nSpriteMaterial.prototype.constructor = SpriteMaterial;\nSpriteMaterial.prototype.isSpriteMaterial = true;\n\nSpriteMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\tthis.map = source.map;\n\n\tthis.rotation = source.rotation;\n\n\treturn this;\n\n};\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Sprite( material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Sprite';\n\n\tthis.material = ( material !== undefined ) ? material : new SpriteMaterial();\n\n\tthis.center = new Vector2( 0.5, 0.5 );\n\n}\n\nSprite.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Sprite,\n\n\tisSprite: true,\n\n\traycast: ( function () {\n\n\t\tvar intersectPoint = new Vector3();\n\t\tvar worldScale = new Vector3();\n\t\tvar mvPosition = new Vector3();\n\n\t\tvar alignedPosition = new Vector2();\n\t\tvar rotatedPosition = new Vector2();\n\t\tvar viewWorldMatrix = new Matrix4();\n\n\t\tvar vA = new Vector3();\n\t\tvar vB = new Vector3();\n\t\tvar vC = new Vector3();\n\n\t\tfunction transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {\n\n\t\t\t// compute position in camera space\n\t\t\talignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );\n\n\t\t\t// to check if rotation is not zero\n\t\t\tif ( sin !== undefined ) {\n\n\t\t\t\trotatedPosition.x = ( cos * alignedPosition.x ) - ( sin * alignedPosition.y );\n\t\t\t\trotatedPosition.y = ( sin * alignedPosition.x ) + ( cos * alignedPosition.y );\n\n\t\t\t} else {\n\n\t\t\t\trotatedPosition.copy( alignedPosition );\n\n\t\t\t}\n\n\n\t\t\tvertexPosition.copy( mvPosition );\n\t\t\tvertexPosition.x += rotatedPosition.x;\n\t\t\tvertexPosition.y += rotatedPosition.y;\n\n\t\t\t// transform to world space\n\t\t\tvertexPosition.applyMatrix4( viewWorldMatrix );\n\n\t\t}\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tworldScale.setFromMatrixScale( this.matrixWorld );\n\t\t\tviewWorldMatrix.getInverse( this.modelViewMatrix ).premultiply( this.matrixWorld );\n\t\t\tmvPosition.setFromMatrixPosition( this.modelViewMatrix );\n\n\t\t\tvar rotation = this.material.rotation;\n\t\t\tvar sin, cos;\n\t\t\tif ( rotation !== 0 ) {\n\n\t\t\t\tcos = Math.cos( rotation );\n\t\t\t\tsin = Math.sin( rotation );\n\n\t\t\t}\n\n\t\t\tvar center = this.center;\n\n\t\t\ttransformVertex( vA.set( - 0.5, - 0.5, 0 ), mvPosition, center, worldScale, sin, cos );\n\t\t\ttransformVertex( vB.set( 0.5, - 0.5, 0 ), mvPosition, center, worldScale, sin, cos );\n\t\t\ttransformVertex( vC.set( 0.5, 0.5, 0 ), mvPosition, center, worldScale, sin, cos );\n\n\t\t\t// check first triangle\n\t\t\tvar intersect = raycaster.ray.intersectTriangle( vA, vB, vC, false, intersectPoint );\n\n\t\t\tif ( intersect === null ) {\n\n\t\t\t\t// check second triangle\n\t\t\t\ttransformVertex( vB.set( - 0.5, 0.5, 0 ), mvPosition, center, worldScale, sin, cos );\n\t\t\t\tintersect = raycaster.ray.intersectTriangle( vA, vC, vB, false, intersectPoint );\n\t\t\t\tif ( intersect === null ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\t\tintersects.push( {\n\n\t\t\t\tdistance: distance,\n\t\t\t\tpoint: intersectPoint.clone(),\n\t\t\t\tface: null,\n\t\t\t\tobject: this\n\n\t\t\t} );\n\n\t\t};\n\n\t}() ),\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.material ).copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\treturn this;\n\n\t}\n\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LOD() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'LOD';\n\n\tObject.defineProperties( this, {\n\t\tlevels: {\n\t\t\tenumerable: true,\n\t\t\tvalue: []\n\t\t}\n\t} );\n\n}\n\nLOD.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: LOD,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source, false );\n\n\t\tvar levels = source.levels;\n\n\t\tfor ( var i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tvar level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\taddLevel: function ( object, distance ) {\n\n\t\tif ( distance === undefined ) distance = 0;\n\n\t\tdistance = Math.abs( distance );\n\n\t\tvar levels = this.levels;\n\n\t\tfor ( var l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, object: object } );\n\n\t\tthis.add( object );\n\n\t},\n\n\tgetObjectForDistance: function ( distance ) {\n\n\t\tvar levels = this.levels;\n\n\t\tfor ( var i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\tif ( distance < levels[ i ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn levels[ i - 1 ].object;\n\n\t},\n\n\traycast: ( function () {\n\n\t\tvar matrixPosition = new Vector3();\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tmatrixPosition.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tvar distance = raycaster.ray.origin.distanceTo( matrixPosition );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t};\n\n\t}() ),\n\n\tupdate: function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\treturn function update( camera ) {\n\n\t\t\tvar levels = this.levels;\n\n\t\t\tif ( levels.length > 1 ) {\n\n\t\t\t\tv1.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t\tv2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\t\tvar distance = v1.distanceTo( v2 );\n\n\t\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\t\tfor ( var i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( distance >= levels[ i ].distance ) {\n\n\t\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.levels = [];\n\n\t\tvar levels = this.levels;\n\n\t\tfor ( var i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tvar level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author michael guerrero / http://realitymeltdown.com\n * @author ikerr / http://verold.com\n */\n\nfunction Skeleton( bones, boneInverses ) {\n\n\t// copy the bone array\n\n\tbones = bones || [];\n\n\tthis.bones = bones.slice( 0 );\n\tthis.boneMatrices = new Float32Array( this.bones.length * 16 );\n\n\t// use the supplied bone inverses or calculate the inverses\n\n\tif ( boneInverses === undefined ) {\n\n\t\tthis.calculateInverses();\n\n\t} else {\n\n\t\tif ( this.bones.length === boneInverses.length ) {\n\n\t\t\tthis.boneInverses = boneInverses.slice( 0 );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Skeleton boneInverses is the wrong length.' );\n\n\t\t\tthis.boneInverses = [];\n\n\t\t\tfor ( var i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nObject.assign( Skeleton.prototype, {\n\n\tcalculateInverses: function () {\n\n\t\tthis.boneInverses = [];\n\n\t\tfor ( var i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tvar inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.getInverse( this.bones[ i ].matrixWorld );\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t},\n\n\tpose: function () {\n\n\t\tvar bone, i, il;\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tbone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.getInverse( this.boneInverses[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tbone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.getInverse( bone.parent.matrixWorld );\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdate: ( function () {\n\n\t\tvar offsetMatrix = new Matrix4();\n\t\tvar identityMatrix = new Matrix4();\n\n\t\treturn function update() {\n\n\t\t\tvar bones = this.bones;\n\t\t\tvar boneInverses = this.boneInverses;\n\t\t\tvar boneMatrices = this.boneMatrices;\n\t\t\tvar boneTexture = this.boneTexture;\n\n\t\t\t// flatten bone matrices to array\n\n\t\t\tfor ( var i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t\t// compute the offset between the current and the original transform\n\n\t\t\t\tvar matrix = bones[ i ] ? bones[ i ].matrixWorld : identityMatrix;\n\n\t\t\t\toffsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t\toffsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t\t}\n\n\t\t\tif ( boneTexture !== undefined ) {\n\n\t\t\t\tboneTexture.needsUpdate = true;\n\n\t\t\t}\n\n\t\t};\n\n\t} )(),\n\n\tclone: function () {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t},\n\n\tgetBoneByName: function ( name ) {\n\n\t\tfor ( var i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tvar bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author ikerr / http://verold.com\n */\n\nfunction Bone() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Bone';\n\n}\n\nBone.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Bone,\n\n\tisBone: true\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author ikerr / http://verold.com\n */\n\nfunction SkinnedMesh( geometry, material ) {\n\n\tMesh.call( this, geometry, material );\n\n\tthis.type = 'SkinnedMesh';\n\n\tthis.bindMode = 'attached';\n\tthis.bindMatrix = new Matrix4();\n\tthis.bindMatrixInverse = new Matrix4();\n\n\tvar bones = this.initBones();\n\tvar skeleton = new Skeleton( bones );\n\n\tthis.bind( skeleton, this.matrixWorld );\n\n\tthis.normalizeSkinWeights();\n\n}\n\nSkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\tconstructor: SkinnedMesh,\n\n\tisSkinnedMesh: true,\n\n\tinitBones: function () {\n\n\t\tvar bones = [], bone, gbone;\n\t\tvar i, il;\n\n\t\tif ( this.geometry && this.geometry.bones !== undefined ) {\n\n\t\t\t// first, create array of 'Bone' objects from geometry data\n\n\t\t\tfor ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) {\n\n\t\t\t\tgbone = this.geometry.bones[ i ];\n\n\t\t\t\t// create new 'Bone' object\n\n\t\t\t\tbone = new Bone();\n\t\t\t\tbones.push( bone );\n\n\t\t\t\t// apply values\n\n\t\t\t\tbone.name = gbone.name;\n\t\t\t\tbone.position.fromArray( gbone.pos );\n\t\t\t\tbone.quaternion.fromArray( gbone.rotq );\n\t\t\t\tif ( gbone.scl !== undefined ) bone.scale.fromArray( gbone.scl );\n\n\t\t\t}\n\n\t\t\t// second, create bone hierarchy\n\n\t\t\tfor ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) {\n\n\t\t\t\tgbone = this.geometry.bones[ i ];\n\n\t\t\t\tif ( ( gbone.parent !== - 1 ) && ( gbone.parent !== null ) && ( bones[ gbone.parent ] !== undefined ) ) {\n\n\t\t\t\t\t// subsequent bones in the hierarchy\n\n\t\t\t\t\tbones[ gbone.parent ].add( bones[ i ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// topmost bone, immediate child of the skinned mesh\n\n\t\t\t\t\tthis.add( bones[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// now the bones are part of the scene graph and children of the skinned mesh.\n\t\t// let's update the corresponding matrices\n\n\t\tthis.updateMatrixWorld( true );\n\n\t\treturn bones;\n\n\t},\n\n\tbind: function ( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.getInverse( bindMatrix );\n\n\t},\n\n\tpose: function () {\n\n\t\tthis.skeleton.pose();\n\n\t},\n\n\tnormalizeSkinWeights: function () {\n\n\t\tvar scale, i;\n\n\t\tif ( this.geometry && this.geometry.isGeometry ) {\n\n\t\t\tfor ( i = 0; i < this.geometry.skinWeights.length; i ++ ) {\n\n\t\t\t\tvar sw = this.geometry.skinWeights[ i ];\n\n\t\t\t\tscale = 1.0 / sw.manhattanLength();\n\n\t\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\t\tsw.multiplyScalar( scale );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsw.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( this.geometry && this.geometry.isBufferGeometry ) {\n\n\t\t\tvar vec = new Vector4();\n\n\t\t\tvar skinWeight = this.geometry.attributes.skinWeight;\n\n\t\t\tfor ( i = 0; i < skinWeight.count; i ++ ) {\n\n\t\t\t\tvec.x = skinWeight.getX( i );\n\t\t\t\tvec.y = skinWeight.getY( i );\n\t\t\t\tvec.z = skinWeight.getZ( i );\n\t\t\t\tvec.w = skinWeight.getW( i );\n\n\t\t\t\tscale = 1.0 / vec.manhattanLength();\n\n\t\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\t\tvec.multiplyScalar( scale );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvec.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t\t}\n\n\t\t\t\tskinWeight.setXYZW( i, vec.x, vec.y, vec.z, vec.w );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tMesh.prototype.updateMatrixWorld.call( this, force );\n\n\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\tthis.bindMatrixInverse.getInverse( this.matrixWorld );\n\n\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\tthis.bindMatrixInverse.getInverse( this.bindMatrix );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: <hex>,\n * opacity: <float>,\n *\n * linewidth: <float>,\n * linecap: \"round\",\n * linejoin: \"round\"\n * }\n */\n\nfunction LineBasicMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'LineBasicMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.linewidth = 1;\n\tthis.linecap = 'round';\n\tthis.linejoin = 'round';\n\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nLineBasicMaterial.prototype = Object.create( Material.prototype );\nLineBasicMaterial.prototype.constructor = LineBasicMaterial;\n\nLineBasicMaterial.prototype.isLineBasicMaterial = true;\n\nLineBasicMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.linewidth = source.linewidth;\n\tthis.linecap = source.linecap;\n\tthis.linejoin = source.linejoin;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Line( geometry, material, mode ) {\n\n\tif ( mode === 1 ) {\n\n\t\tconsole.warn( 'THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead.' );\n\t\treturn new LineSegments( geometry, material );\n\n\t}\n\n\tObject3D.call( this );\n\n\tthis.type = 'Line';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new LineBasicMaterial( { color: Math.random() * 0xffffff } );\n\n}\n\nLine.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Line,\n\n\tisLine: true,\n\n\tcomputeLineDistances: ( function () {\n\n\t\tvar start = new Vector3();\n\t\tvar end = new Vector3();\n\n\t\treturn function computeLineDistances() {\n\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t// we assume non-indexed geometry\n\n\t\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\t\tvar positionAttribute = geometry.attributes.position;\n\t\t\t\t\tvar lineDistances = [ 0 ];\n\n\t\t\t\t\tfor ( var i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t\tstart.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t\tend.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\t\tlineDistances[ i ] += start.distanceTo( end );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.addAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar lineDistances = geometry.lineDistances;\n\n\t\t\t\tlineDistances[ 0 ] = 0;\n\n\t\t\t\tfor ( var i = 1, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += vertices[ i - 1 ].distanceTo( vertices[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}() ),\n\n\traycast: ( function () {\n\n\t\tvar inverseMatrix = new Matrix4();\n\t\tvar ray = new Ray();\n\t\tvar sphere = new Sphere();\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tvar precision = raycaster.linePrecision;\n\t\t\tvar precisionSq = precision * precision;\n\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar matrixWorld = this.matrixWorld;\n\n\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\tsphere.applyMatrix4( matrixWorld );\n\n\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t//\n\n\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\tvar vStart = new Vector3();\n\t\t\tvar vEnd = new Vector3();\n\t\t\tvar interSegment = new Vector3();\n\t\t\tvar interRay = new Vector3();\n\t\t\tvar step = ( this && this.isLineSegments ) ? 2 : 1;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tvar index = geometry.index;\n\t\t\t\tvar attributes = geometry.attributes;\n\t\t\t\tvar positions = attributes.position.array;\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\tvar indices = index.array;\n\n\t\t\t\t\tfor ( var i = 0, l = indices.length - 1; i < l; i += step ) {\n\n\t\t\t\t\t\tvar a = indices[ i ];\n\t\t\t\t\t\tvar b = indices[ i + 1 ];\n\n\t\t\t\t\t\tvStart.fromArray( positions, a * 3 );\n\t\t\t\t\t\tvEnd.fromArray( positions, b * 3 );\n\n\t\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\t\tif ( distSq > precisionSq ) continue;\n\n\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var i = 0, l = positions.length / 3 - 1; i < l; i += step ) {\n\n\t\t\t\t\t\tvStart.fromArray( positions, 3 * i );\n\t\t\t\t\t\tvEnd.fromArray( positions, 3 * i + 3 );\n\n\t\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\t\tif ( distSq > precisionSq ) continue;\n\n\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar nbVertices = vertices.length;\n\n\t\t\t\tfor ( var i = 0; i < nbVertices - 1; i += step ) {\n\n\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > precisionSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() ),\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LineSegments( geometry, material ) {\n\n\tLine.call( this, geometry, material );\n\n\tthis.type = 'LineSegments';\n\n}\n\nLineSegments.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\tconstructor: LineSegments,\n\n\tisLineSegments: true,\n\n\tcomputeLineDistances: ( function () {\n\n\t\tvar start = new Vector3();\n\t\tvar end = new Vector3();\n\n\t\treturn function computeLineDistances() {\n\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t// we assume non-indexed geometry\n\n\t\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\t\tvar positionAttribute = geometry.attributes.position;\n\t\t\t\t\tvar lineDistances = [];\n\n\t\t\t\t\tfor ( var i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t\tstart.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t\tend.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + start.distanceTo( end );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.addAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar lineDistances = geometry.lineDistances;\n\n\t\t\t\tfor ( var i = 0, l = vertices.length; i < l; i += 2 ) {\n\n\t\t\t\t\tstart.copy( vertices[ i ] );\n\t\t\t\t\tend.copy( vertices[ i + 1 ] );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + start.distanceTo( end );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}() )\n\n} );\n\n/**\n * @author mgreter / http://github.com/mgreter\n */\n\nfunction LineLoop( geometry, material ) {\n\n\tLine.call( this, geometry, material );\n\n\tthis.type = 'LineLoop';\n\n}\n\nLineLoop.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\tconstructor: LineLoop,\n\n\tisLineLoop: true,\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: <hex>,\n * opacity: <float>,\n * map: new THREE.Texture( <Image> ),\n *\n * size: <float>,\n * sizeAttenuation: <bool>\n *\n * morphTargets: <bool>\n * }\n */\n\nfunction PointsMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'PointsMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.map = null;\n\n\tthis.size = 1;\n\tthis.sizeAttenuation = true;\n\n\tthis.morphTargets = false;\n\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nPointsMaterial.prototype = Object.create( Material.prototype );\nPointsMaterial.prototype.constructor = PointsMaterial;\n\nPointsMaterial.prototype.isPointsMaterial = true;\n\nPointsMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.size = source.size;\n\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\tthis.morphTargets = source.morphTargets;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Points( geometry, material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Points';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new PointsMaterial( { color: Math.random() * 0xffffff } );\n\n}\n\nPoints.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Points,\n\n\tisPoints: true,\n\n\traycast: ( function () {\n\n\t\tvar inverseMatrix = new Matrix4();\n\t\tvar ray = new Ray();\n\t\tvar sphere = new Sphere();\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tvar object = this;\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar matrixWorld = this.matrixWorld;\n\t\t\tvar threshold = raycaster.params.Points.threshold;\n\n\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\tsphere.applyMatrix4( matrixWorld );\n\t\t\tsphere.radius += threshold;\n\n\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t//\n\n\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\tvar localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\t\tvar localThresholdSq = localThreshold * localThreshold;\n\t\t\tvar position = new Vector3();\n\t\t\tvar intersectPoint = new Vector3();\n\n\t\t\tfunction testPoint( point, index ) {\n\n\t\t\t\tvar rayPointDistanceSq = ray.distanceSqToPoint( point );\n\n\t\t\t\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\t\t\t\tray.closestPointToPoint( point, intersectPoint );\n\t\t\t\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\t\t\t\tpoint: intersectPoint.clone(),\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tobject: object\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tvar index = geometry.index;\n\t\t\t\tvar attributes = geometry.attributes;\n\t\t\t\tvar positions = attributes.position.array;\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\tvar indices = index.array;\n\n\t\t\t\t\tfor ( var i = 0, il = indices.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar a = indices[ i ];\n\n\t\t\t\t\t\tposition.fromArray( positions, a * 3 );\n\n\t\t\t\t\t\ttestPoint( position, a );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var i = 0, l = positions.length / 3; i < l; i ++ ) {\n\n\t\t\t\t\t\tposition.fromArray( positions, i * 3 );\n\n\t\t\t\t\t\ttestPoint( position, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\n\t\t\t\tfor ( var i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\ttestPoint( vertices[ i ], i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() ),\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\tTexture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.generateMipmaps = false;\n\n}\n\nVideoTexture.prototype = Object.assign( Object.create( Texture.prototype ), {\n\n\tconstructor: VideoTexture,\n\n\tisVideoTexture: true,\n\n\tupdate: function () {\n\n\t\tvar video = this.image;\n\n\t\tif ( video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.image = { width: width, height: height };\n\tthis.mipmaps = mipmaps;\n\n\t// no flipping for cube textures\n\t// (also flipping doesn't work for compressed textures )\n\n\tthis.flipY = false;\n\n\t// can't generate mipmaps for compressed textures\n\t// mips must be embedded in DDS files\n\n\tthis.generateMipmaps = false;\n\n}\n\nCompressedTexture.prototype = Object.create( Texture.prototype );\nCompressedTexture.prototype.constructor = CompressedTexture;\n\nCompressedTexture.prototype.isCompressedTexture = true;\n\n/**\n * @author Matt DesLauriers / @mattdesl\n * @author atix / arthursilber.de\n */\n\nfunction DepthTexture( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {\n\n\tformat = format !== undefined ? format : DepthFormat;\n\n\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t}\n\n\tif ( type === undefined && format === DepthFormat ) type = UnsignedShortType;\n\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.image = { width: width, height: height };\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\tthis.flipY = false;\n\tthis.generateMipmaps\t= false;\n\n}\n\nDepthTexture.prototype = Object.create( Texture.prototype );\nDepthTexture.prototype.constructor = DepthTexture;\nDepthTexture.prototype.isDepthTexture = true;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction WireframeGeometry( geometry ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'WireframeGeometry';\n\n\t// buffer\n\n\tvar vertices = [];\n\n\t// helper variables\n\n\tvar i, j, l, o, ol;\n\tvar edge = [ 0, 0 ], edges = {}, e, edge1, edge2;\n\tvar key, keys = [ 'a', 'b', 'c' ];\n\tvar vertex;\n\n\t// different logic for Geometry and BufferGeometry\n\n\tif ( geometry && geometry.isGeometry ) {\n\n\t\t// create a data structure that contains all edges without duplicates\n\n\t\tvar faces = geometry.faces;\n\n\t\tfor ( i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\tedge1 = face[ keys[ j ] ];\n\t\t\t\tedge2 = face[ keys[ ( j + 1 ) % 3 ] ];\n\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate vertices\n\n\t\tfor ( key in edges ) {\n\n\t\t\te = edges[ key ];\n\n\t\t\tvertex = geometry.vertices[ e.index1 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\tvertex = geometry.vertices[ e.index2 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t} else if ( geometry && geometry.isBufferGeometry ) {\n\n\t\tvar position, indices, groups;\n\t\tvar group, start, count;\n\t\tvar index1, index2;\n\n\t\tvertex = new Vector3();\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\t// indexed BufferGeometry\n\n\t\t\tposition = geometry.attributes.position;\n\t\t\tindices = geometry.index;\n\t\t\tgroups = geometry.groups;\n\n\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t}\n\n\t\t\t// create a data structure that contains all eges without duplicates\n\n\t\t\tfor ( o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\tgroup = groups[ o ];\n\n\t\t\t\tstart = group.start;\n\t\t\t\tcount = group.count;\n\n\t\t\t\tfor ( i = start, l = ( start + count ); i < l; i += 3 ) {\n\n\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\tedge1 = indices.getX( i + j );\n\t\t\t\t\t\tedge2 = indices.getX( i + ( j + 1 ) % 3 );\n\t\t\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// generate vertices\n\n\t\t\tfor ( key in edges ) {\n\n\t\t\t\te = edges[ key ];\n\n\t\t\t\tvertex.fromBufferAttribute( position, e.index1 );\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\tvertex.fromBufferAttribute( position, e.index2 );\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// non-indexed BufferGeometry\n\n\t\t\tposition = geometry.attributes.position;\n\n\t\t\tfor ( i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\tindex1 = 3 * i + j;\n\t\t\t\t\tvertex.fromBufferAttribute( position, index1 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\tindex2 = 3 * i + ( ( j + 1 ) % 3 );\n\t\t\t\t\tvertex.fromBufferAttribute( position, index2 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n}\n\nWireframeGeometry.prototype = Object.create( BufferGeometry.prototype );\nWireframeGeometry.prototype.constructor = WireframeGeometry;\n\n/**\n * @author zz85 / https://github.com/zz85\n * @author Mugen87 / https://github.com/Mugen87\n *\n * Parametric Surfaces Geometry\n * based on the brilliant article by @prideout http://prideout.net/blog/?p=44\n */\n\n// ParametricGeometry\n\nfunction ParametricGeometry( func, slices, stacks ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'ParametricGeometry';\n\n\tthis.parameters = {\n\t\tfunc: func,\n\t\tslices: slices,\n\t\tstacks: stacks\n\t};\n\n\tthis.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) );\n\tthis.mergeVertices();\n\n}\n\nParametricGeometry.prototype = Object.create( Geometry.prototype );\nParametricGeometry.prototype.constructor = ParametricGeometry;\n\n// ParametricBufferGeometry\n\nfunction ParametricBufferGeometry( func, slices, stacks ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'ParametricBufferGeometry';\n\n\tthis.parameters = {\n\t\tfunc: func,\n\t\tslices: slices,\n\t\tstacks: stacks\n\t};\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\tvar EPS = 0.00001;\n\n\tvar normal = new Vector3();\n\n\tvar p0 = new Vector3(), p1 = new Vector3();\n\tvar pu = new Vector3(), pv = new Vector3();\n\n\tvar i, j;\n\n\tif ( func.length < 3 ) {\n\n\t\tconsole.error( 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' );\n\n\t}\n\n\t// generate vertices, normals and uvs\n\n\tvar sliceCount = slices + 1;\n\n\tfor ( i = 0; i <= stacks; i ++ ) {\n\n\t\tvar v = i / stacks;\n\n\t\tfor ( j = 0; j <= slices; j ++ ) {\n\n\t\t\tvar u = j / slices;\n\n\t\t\t// vertex\n\n\t\t\tfunc( u, v, p0 );\n\t\t\tvertices.push( p0.x, p0.y, p0.z );\n\n\t\t\t// normal\n\n\t\t\t// approximate tangent vectors via finite differences\n\n\t\t\tif ( u - EPS >= 0 ) {\n\n\t\t\t\tfunc( u - EPS, v, p1 );\n\t\t\t\tpu.subVectors( p0, p1 );\n\n\t\t\t} else {\n\n\t\t\t\tfunc( u + EPS, v, p1 );\n\t\t\t\tpu.subVectors( p1, p0 );\n\n\t\t\t}\n\n\t\t\tif ( v - EPS >= 0 ) {\n\n\t\t\t\tfunc( u, v - EPS, p1 );\n\t\t\t\tpv.subVectors( p0, p1 );\n\n\t\t\t} else {\n\n\t\t\t\tfunc( u, v + EPS, p1 );\n\t\t\t\tpv.subVectors( p1, p0 );\n\n\t\t\t}\n\n\t\t\t// cross product of tangent vectors returns surface normal\n\n\t\t\tnormal.crossVectors( pu, pv ).normalize();\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( u, v );\n\n\t\t}\n\n\t}\n\n\t// generate indices\n\n\tfor ( i = 0; i < stacks; i ++ ) {\n\n\t\tfor ( j = 0; j < slices; j ++ ) {\n\n\t\t\tvar a = i * sliceCount + j;\n\t\t\tvar b = i * sliceCount + j + 1;\n\t\t\tvar c = ( i + 1 ) * sliceCount + j + 1;\n\t\t\tvar d = ( i + 1 ) * sliceCount + j;\n\n\t\t\t// faces one and two\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry;\n\n/**\n * @author clockworkgeek / https://github.com/clockworkgeek\n * @author timothypratley / https://github.com/timothypratley\n * @author WestLangley / http://github.com/WestLangley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// PolyhedronGeometry\n\nfunction PolyhedronGeometry( vertices, indices, radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'PolyhedronGeometry';\n\n\tthis.parameters = {\n\t\tvertices: vertices,\n\t\tindices: indices,\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new PolyhedronBufferGeometry( vertices, indices, radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nPolyhedronGeometry.prototype = Object.create( Geometry.prototype );\nPolyhedronGeometry.prototype.constructor = PolyhedronGeometry;\n\n// PolyhedronBufferGeometry\n\nfunction PolyhedronBufferGeometry( vertices, indices, radius, detail ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'PolyhedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tvertices: vertices,\n\t\tindices: indices,\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tradius = radius || 1;\n\tdetail = detail || 0;\n\n\t// default buffer data\n\n\tvar vertexBuffer = [];\n\tvar uvBuffer = [];\n\n\t// the subdivision creates the vertex buffer data\n\n\tsubdivide( detail );\n\n\t// all vertices should lie on a conceptual sphere with a given radius\n\n\tappplyRadius( radius );\n\n\t// finally, create the uv data\n\n\tgenerateUVs();\n\n\t// build non-indexed geometry\n\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\tif ( detail === 0 ) {\n\n\t\tthis.computeVertexNormals(); // flat normals\n\n\t} else {\n\n\t\tthis.normalizeNormals(); // smooth normals\n\n\t}\n\n\t// helper functions\n\n\tfunction subdivide( detail ) {\n\n\t\tvar a = new Vector3();\n\t\tvar b = new Vector3();\n\t\tvar c = new Vector3();\n\n\t\t// iterate over all faces and apply a subdivison with the given detail value\n\n\t\tfor ( var i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t// get the vertices of the face\n\n\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t// perform subdivision\n\n\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t}\n\n\t}\n\n\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\tvar cols = Math.pow( 2, detail );\n\n\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\tvar v = [];\n\n\t\tvar i, j;\n\n\t\t// construct all of the vertices for this subdivision\n\n\t\tfor ( i = 0; i <= cols; i ++ ) {\n\n\t\t\tv[ i ] = [];\n\n\t\t\tvar aj = a.clone().lerp( c, i / cols );\n\t\t\tvar bj = b.clone().lerp( c, i / cols );\n\n\t\t\tvar rows = cols - i;\n\n\t\t\tfor ( j = 0; j <= rows; j ++ ) {\n\n\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// construct all of the faces\n\n\t\tfor ( i = 0; i < cols; i ++ ) {\n\n\t\t\tfor ( j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\tvar k = Math.floor( j / 2 );\n\n\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction appplyRadius( radius ) {\n\n\t\tvar vertex = new Vector3();\n\n\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\tfor ( var i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t}\n\n\t}\n\n\tfunction generateUVs() {\n\n\t\tvar vertex = new Vector3();\n\n\t\tfor ( var i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\tvar u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\tvar v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t}\n\n\t\tcorrectUVs();\n\n\t\tcorrectSeam();\n\n\t}\n\n\tfunction correctSeam() {\n\n\t\t// handle case when face straddles the seam, see #3269\n\n\t\tfor ( var i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t// uv data of a single face\n\n\t\t\tvar x0 = uvBuffer[ i + 0 ];\n\t\t\tvar x1 = uvBuffer[ i + 2 ];\n\t\t\tvar x2 = uvBuffer[ i + 4 ];\n\n\t\t\tvar max = Math.max( x0, x1, x2 );\n\t\t\tvar min = Math.min( x0, x1, x2 );\n\n\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction pushVertex( vertex ) {\n\n\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t}\n\n\tfunction getVertexByIndex( index, vertex ) {\n\n\t\tvar stride = index * 3;\n\n\t\tvertex.x = vertices[ stride + 0 ];\n\t\tvertex.y = vertices[ stride + 1 ];\n\t\tvertex.z = vertices[ stride + 2 ];\n\n\t}\n\n\tfunction correctUVs() {\n\n\t\tvar a = new Vector3();\n\t\tvar b = new Vector3();\n\t\tvar c = new Vector3();\n\n\t\tvar centroid = new Vector3();\n\n\t\tvar uvA = new Vector2();\n\t\tvar uvB = new Vector2();\n\t\tvar uvC = new Vector2();\n\n\t\tfor ( var i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\tvar azi = azimuth( centroid );\n\n\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t}\n\n\t}\n\n\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t}\n\n\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t}\n\n\t}\n\n\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\tfunction azimuth( vector ) {\n\n\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t}\n\n\n\t// Angle above the XZ plane.\n\n\tfunction inclination( vector ) {\n\n\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t}\n\n}\n\nPolyhedronBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nPolyhedronBufferGeometry.prototype.constructor = PolyhedronBufferGeometry;\n\n/**\n * @author timothypratley / https://github.com/timothypratley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// TetrahedronGeometry\n\nfunction TetrahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TetrahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new TetrahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nTetrahedronGeometry.prototype = Object.create( Geometry.prototype );\nTetrahedronGeometry.prototype.constructor = TetrahedronGeometry;\n\n// TetrahedronBufferGeometry\n\nfunction TetrahedronBufferGeometry( radius, detail ) {\n\n\tvar vertices = [\n\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t];\n\n\tvar indices = [\n\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'TetrahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nTetrahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nTetrahedronBufferGeometry.prototype.constructor = TetrahedronBufferGeometry;\n\n/**\n * @author timothypratley / https://github.com/timothypratley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// OctahedronGeometry\n\nfunction OctahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'OctahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new OctahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nOctahedronGeometry.prototype = Object.create( Geometry.prototype );\nOctahedronGeometry.prototype.constructor = OctahedronGeometry;\n\n// OctahedronBufferGeometry\n\nfunction OctahedronBufferGeometry( radius, detail ) {\n\n\tvar vertices = [\n\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t];\n\n\tvar indices = [\n\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t1, 3, 4,\t1, 4, 2\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'OctahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nOctahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nOctahedronBufferGeometry.prototype.constructor = OctahedronBufferGeometry;\n\n/**\n * @author timothypratley / https://github.com/timothypratley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// IcosahedronGeometry\n\nfunction IcosahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'IcosahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new IcosahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nIcosahedronGeometry.prototype = Object.create( Geometry.prototype );\nIcosahedronGeometry.prototype.constructor = IcosahedronGeometry;\n\n// IcosahedronBufferGeometry\n\nfunction IcosahedronBufferGeometry( radius, detail ) {\n\n\tvar t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\tvar vertices = [\n\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t 0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t t, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t];\n\n\tvar indices = [\n\t\t 0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t 1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t 3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t 4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'IcosahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nIcosahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nIcosahedronBufferGeometry.prototype.constructor = IcosahedronBufferGeometry;\n\n/**\n * @author Abe Pazos / https://hamoid.com\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// DodecahedronGeometry\n\nfunction DodecahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'DodecahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new DodecahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nDodecahedronGeometry.prototype = Object.create( Geometry.prototype );\nDodecahedronGeometry.prototype.constructor = DodecahedronGeometry;\n\n// DodecahedronBufferGeometry\n\nfunction DodecahedronBufferGeometry( radius, detail ) {\n\n\tvar t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\tvar r = 1 / t;\n\n\tvar vertices = [\n\n\t\t// (±1, ±1, ±1)\n\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t// (0, ±1/φ, ±φ)\n\t\t 0, - r, - t, 0, - r, t,\n\t\t 0, r, - t, 0, r, t,\n\n\t\t// (±1/φ, ±φ, 0)\n\t\t- r, - t, 0, - r, t, 0,\n\t\t r, - t, 0, r, t, 0,\n\n\t\t// (±φ, 0, ±1/φ)\n\t\t- t, 0, - r, t, 0, - r,\n\t\t- t, 0, r, t, 0, r\n\t];\n\n\tvar indices = [\n\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'DodecahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nDodecahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nDodecahedronBufferGeometry.prototype.constructor = DodecahedronBufferGeometry;\n\n/**\n * @author oosmoxiecode / https://github.com/oosmoxiecode\n * @author WestLangley / https://github.com/WestLangley\n * @author zz85 / https://github.com/zz85\n * @author miningold / https://github.com/miningold\n * @author jonobr1 / https://github.com/jonobr1\n * @author Mugen87 / https://github.com/Mugen87\n *\n */\n\n// TubeGeometry\n\nfunction TubeGeometry( path, tubularSegments, radius, radialSegments, closed, taper ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TubeGeometry';\n\n\tthis.parameters = {\n\t\tpath: path,\n\t\ttubularSegments: tubularSegments,\n\t\tradius: radius,\n\t\tradialSegments: radialSegments,\n\t\tclosed: closed\n\t};\n\n\tif ( taper !== undefined ) console.warn( 'THREE.TubeGeometry: taper has been removed.' );\n\n\tvar bufferGeometry = new TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed );\n\n\t// expose internals\n\n\tthis.tangents = bufferGeometry.tangents;\n\tthis.normals = bufferGeometry.normals;\n\tthis.binormals = bufferGeometry.binormals;\n\n\t// create geometry\n\n\tthis.fromBufferGeometry( bufferGeometry );\n\tthis.mergeVertices();\n\n}\n\nTubeGeometry.prototype = Object.create( Geometry.prototype );\nTubeGeometry.prototype.constructor = TubeGeometry;\n\n// TubeBufferGeometry\n\nfunction TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'TubeBufferGeometry';\n\n\tthis.parameters = {\n\t\tpath: path,\n\t\ttubularSegments: tubularSegments,\n\t\tradius: radius,\n\t\tradialSegments: radialSegments,\n\t\tclosed: closed\n\t};\n\n\ttubularSegments = tubularSegments || 64;\n\tradius = radius || 1;\n\tradialSegments = radialSegments || 8;\n\tclosed = closed || false;\n\n\tvar frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t// expose internals\n\n\tthis.tangents = frames.tangents;\n\tthis.normals = frames.normals;\n\tthis.binormals = frames.binormals;\n\n\t// helper variables\n\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\tvar uv = new Vector2();\n\tvar P = new Vector3();\n\n\tvar i, j;\n\n\t// buffer\n\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\tvar indices = [];\n\n\t// create buffer data\n\n\tgenerateBufferData();\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t// functions\n\n\tfunction generateBufferData() {\n\n\t\tfor ( i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\tgenerateSegment( i );\n\n\t\t}\n\n\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t// at the regular position on the given path\n\t\t//\n\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t// uvs are generated in a separate function.\n\t\t// this makes it easy compute correct values for closed geometries\n\n\t\tgenerateUVs();\n\n\t\t// finally create faces\n\n\t\tgenerateIndices();\n\n\t}\n\n\tfunction generateSegment( i ) {\n\n\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t// retrieve corresponding normal and binormal\n\n\t\tvar N = frames.normals[ i ];\n\t\tvar B = frames.binormals[ i ];\n\n\t\t// generate normals and vertices for the current segment\n\n\t\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\n\t\t\tvar sin = Math.sin( v );\n\t\t\tvar cos = - Math.cos( v );\n\n\t\t\t// normal\n\n\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\tnormal.normalize();\n\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t}\n\n\tfunction generateIndices() {\n\n\t\tfor ( j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\tvar a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tvar b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tvar c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tvar d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction generateUVs() {\n\n\t\tfor ( i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nTubeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nTubeBufferGeometry.prototype.constructor = TubeBufferGeometry;\n\n/**\n * @author oosmoxiecode\n * @author Mugen87 / https://github.com/Mugen87\n *\n * based on http://www.blackpawn.com/texts/pqtorus/\n */\n\n// TorusKnotGeometry\n\nfunction TorusKnotGeometry( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TorusKnotGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\ttubularSegments: tubularSegments,\n\t\tradialSegments: radialSegments,\n\t\tp: p,\n\t\tq: q\n\t};\n\n\tif ( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' );\n\n\tthis.fromBufferGeometry( new TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) );\n\tthis.mergeVertices();\n\n}\n\nTorusKnotGeometry.prototype = Object.create( Geometry.prototype );\nTorusKnotGeometry.prototype.constructor = TorusKnotGeometry;\n\n// TorusKnotBufferGeometry\n\nfunction TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'TorusKnotBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\ttubularSegments: tubularSegments,\n\t\tradialSegments: radialSegments,\n\t\tp: p,\n\t\tq: q\n\t};\n\n\tradius = radius || 1;\n\ttube = tube || 0.4;\n\ttubularSegments = Math.floor( tubularSegments ) || 64;\n\tradialSegments = Math.floor( radialSegments ) || 8;\n\tp = p || 2;\n\tq = q || 3;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar i, j;\n\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\n\tvar P1 = new Vector3();\n\tvar P2 = new Vector3();\n\n\tvar B = new Vector3();\n\tvar T = new Vector3();\n\tvar N = new Vector3();\n\n\t// generate vertices, normals and uvs\n\n\tfor ( i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segement\n\n\t\tvar u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t// calculate orthonormal basis\n\n\t\tT.subVectors( P2, P1 );\n\t\tN.addVectors( P2, P1 );\n\t\tB.crossVectors( T, N );\n\t\tN.crossVectors( B, T );\n\n\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\tB.normalize();\n\t\tN.normalize();\n\n\t\tfor ( j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\t\t\tvar cx = - tube * Math.cos( v );\n\t\t\tvar cy = tube * Math.sin( v );\n\n\t\t\t// now calculate the final vertex position.\n\t\t\t// first we orient the extrusion with our basis vectos, then we add it to the current position on the curve\n\n\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( i / tubularSegments );\n\t\t\tuvs.push( j / radialSegments );\n\n\t\t}\n\n\t}\n\n\t// generate indices\n\n\tfor ( j = 1; j <= tubularSegments; j ++ ) {\n\n\t\tfor ( i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t// indices\n\n\t\t\tvar a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\tvar b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\tvar c = ( radialSegments + 1 ) * j + i;\n\t\t\tvar d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t// this function calculates the current position on the torus curve\n\n\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\tvar cu = Math.cos( u );\n\t\tvar su = Math.sin( u );\n\t\tvar quOverP = q / p * u;\n\t\tvar cs = Math.cos( quOverP );\n\n\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t}\n\n}\n\nTorusKnotBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nTorusKnotBufferGeometry.prototype.constructor = TorusKnotBufferGeometry;\n\n/**\n * @author oosmoxiecode\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// TorusGeometry\n\nfunction TorusGeometry( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TorusGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\tradialSegments: radialSegments,\n\t\ttubularSegments: tubularSegments,\n\t\tarc: arc\n\t};\n\n\tthis.fromBufferGeometry( new TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) );\n\tthis.mergeVertices();\n\n}\n\nTorusGeometry.prototype = Object.create( Geometry.prototype );\nTorusGeometry.prototype.constructor = TorusGeometry;\n\n// TorusBufferGeometry\n\nfunction TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'TorusBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\tradialSegments: radialSegments,\n\t\ttubularSegments: tubularSegments,\n\t\tarc: arc\n\t};\n\n\tradius = radius || 1;\n\ttube = tube || 0.4;\n\tradialSegments = Math.floor( radialSegments ) || 8;\n\ttubularSegments = Math.floor( tubularSegments ) || 6;\n\tarc = arc || Math.PI * 2;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar center = new Vector3();\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\n\tvar j, i;\n\n\t// generate vertices, normals and uvs\n\n\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\tfor ( i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\tvar u = i / tubularSegments * arc;\n\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( i / tubularSegments );\n\t\t\tuvs.push( j / radialSegments );\n\n\t\t}\n\n\t}\n\n\t// generate indices\n\n\tfor ( j = 1; j <= radialSegments; j ++ ) {\n\n\t\tfor ( i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t// indices\n\n\t\t\tvar a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\tvar b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\tvar c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\tvar d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nTorusBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nTorusBufferGeometry.prototype.constructor = TorusBufferGeometry;\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n * Port from https://github.com/mapbox/earcut (v2.1.2)\n */\n\nvar Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim ) {\n\n\t\tdim = dim || 2;\n\n\t\tvar hasHoles = holeIndices && holeIndices.length,\n\t\t\touterLen = hasHoles ? holeIndices[ 0 ] * dim : data.length,\n\t\t\touterNode = linkedList( data, 0, outerLen, dim, true ),\n\t\t\ttriangles = [];\n\n\t\tif ( ! outerNode ) return triangles;\n\n\t\tvar minX, minY, maxX, maxY, x, y, invSize;\n\n\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\n\t\tif ( data.length > 80 * dim ) {\n\n\t\t\tminX = maxX = data[ 0 ];\n\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\tfor ( var i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\tx = data[ i ];\n\t\t\t\ty = data[ i + 1 ];\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t}\n\n\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\n\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\tinvSize = invSize !== 0 ? 1 / invSize : 0;\n\n\t\t}\n\n\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize );\n\n\t\treturn triangles;\n\n\t}\n\n};\n\n// create a circular doubly linked list from polygon points in the specified winding order\n\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tvar i, last;\n\n\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t} else {\n\n\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t}\n\n\tif ( last && equals( last, last.next ) ) {\n\n\t\tremoveNode( last );\n\t\tlast = last.next;\n\n\t}\n\n\treturn last;\n\n}\n\n// eliminate colinear or duplicate points\n\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tvar p = start, again;\n\n\tdo {\n\n\t\tagain = false;\n\n\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\tremoveNode( p );\n\t\t\tp = end = p.prev;\n\t\t\tif ( p === p.next ) break;\n\t\t\tagain = true;\n\n\t\t} else {\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t} while ( again || p !== end );\n\n\treturn end;\n\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\n\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tvar stop = ear, prev, next;\n\n\t// iterate through ears, slicing them one by one\n\n\twhile ( ear.prev !== ear.next ) {\n\n\t\tprev = ear.prev;\n\t\tnext = ear.next;\n\n\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t// cut off the triangle\n\t\t\ttriangles.push( prev.i / dim );\n\t\t\ttriangles.push( ear.i / dim );\n\t\t\ttriangles.push( next.i / dim );\n\n\t\t\tremoveNode( ear );\n\n\t\t\t// skipping the next vertice leads to less sliver triangles\n\t\t\tear = next.next;\n\t\t\tstop = next.next;\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tear = next;\n\n\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\n\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\n\n\t\t\tif ( ! pass ) {\n\n\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\tear = cureLocalIntersections( ear, triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\n\nfunction isEar( ear ) {\n\n\tvar a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// now make sure we don't have other points inside the potential ear\n\tvar p = ear.next.next;\n\n\twhile ( p !== ear.prev ) {\n\n\t\tif ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tvar a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// triangle bbox; min & max are calculated like this for speed\n\n\tvar minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ),\n\t\tminTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ),\n\t\tmaxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ),\n\t\tmaxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y );\n\n\t// z-order range for the current triangle bbox;\n\n\tvar minZ = zOrder( minTX, minTY, minX, minY, invSize ),\n\t\tmaxZ = zOrder( maxTX, maxTY, minX, minY, invSize );\n\n\t// first look for points inside the triangle in increasing z-order\n\n\tvar p = ear.nextZ;\n\n\twhile ( p && p.z <= maxZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.nextZ;\n\n\t}\n\n\t// then look for points in decreasing z-order\n\n\tp = ear.prevZ;\n\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\n\t\tp = p.prevZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\n\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tvar p = start;\n\n\tdo {\n\n\t\tvar a = p.prev, b = p.next.next;\n\n\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\ttriangles.push( a.i / dim );\n\t\t\ttriangles.push( p.i / dim );\n\t\t\ttriangles.push( b.i / dim );\n\n\t\t\t// remove two nodes involved\n\n\t\t\tremoveNode( p );\n\t\t\tremoveNode( p.next );\n\n\t\t\tp = start = b;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn p;\n\n}\n\n// try splitting polygon into two and triangulate them independently\n\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\n\tvar a = start;\n\n\tdo {\n\n\t\tvar b = a.next.next;\n\n\t\twhile ( b !== a.prev ) {\n\n\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t// split the polygon in two by the diagonal\n\n\t\t\t\tvar c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\n\n\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t// run earcut on each half\n\n\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize );\n\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tb = b.next;\n\n\t\t}\n\n\t\ta = a.next;\n\n\t} while ( a !== start );\n\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\n\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tvar queue = [], i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\n\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\teliminateHole( queue[ i ], outerNode );\n\t\touterNode = filterPoints( outerNode, outerNode.next );\n\n\t}\n\n\treturn outerNode;\n\n}\n\nfunction compareX( a, b ) {\n\n\treturn a.x - b.x;\n\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\n\nfunction eliminateHole( hole, outerNode ) {\n\n\touterNode = findHoleBridge( hole, outerNode );\n\n\tif ( outerNode ) {\n\n\t\tvar b = splitPolygon( outerNode, hole );\n\n\t\tfilterPoints( b, b.next );\n\n\t}\n\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\n\nfunction findHoleBridge( hole, outerNode ) {\n\n\tvar p = outerNode,\n\t\thx = hole.x,\n\t\thy = hole.y,\n\t\tqx = - Infinity,\n\t\tm;\n\n\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t// segment's endpoint with lesser x will be potential connection point\n\n\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tvar x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\n\n\t\t\t\tif ( x === hx ) {\n\n\t\t\t\t\tif ( hy === p.y ) return p;\n\t\t\t\t\tif ( hy === p.next.y ) return p.next;\n\n\t\t\t\t}\n\n\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== outerNode );\n\n\tif ( ! m ) return null;\n\n\tif ( hx === qx ) return m.prev; // hole touches outer segment; pick lower endpoint\n\n\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t// if there are no points found, we have a valid connection;\n\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\tvar stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y,\n\t\ttanMin = Infinity,\n\t\ttan;\n\n\tp = m.next;\n\n\twhile ( p !== stop ) {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\tif ( ( tan < tanMin || ( tan === tanMin && p.x > m.x ) ) && locallyInside( p, hole ) ) {\n\n\t\t\t\tm = p;\n\t\t\t\ttanMin = tan;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t}\n\n\treturn m;\n\n}\n\n// interlink polygon nodes in z-order\n\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tvar p = start;\n\n\tdo {\n\n\t\tif ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\tp.prevZ = p.prev;\n\t\tp.nextZ = p.next;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\tp.prevZ.nextZ = null;\n\tp.prevZ = null;\n\n\tsortLinked( p );\n\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\n\nfunction sortLinked( list ) {\n\n\tvar i, p, q, e, tail, numMerges, pSize, qSize, inSize = 1;\n\n\tdo {\n\n\t\tp = list;\n\t\tlist = null;\n\t\ttail = null;\n\t\tnumMerges = 0;\n\n\t\twhile ( p ) {\n\n\t\t\tnumMerges ++;\n\t\t\tq = p;\n\t\t\tpSize = 0;\n\n\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\tpSize ++;\n\t\t\t\tq = q.nextZ;\n\t\t\t\tif ( ! q ) break;\n\n\t\t\t}\n\n\t\t\tqSize = inSize;\n\n\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\te = p;\n\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\tpSize --;\n\n\t\t\t\t} else {\n\n\t\t\t\t\te = q;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tqSize --;\n\n\t\t\t\t}\n\n\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\telse list = e;\n\n\t\t\t\te.prevZ = tail;\n\t\t\t\ttail = e;\n\n\t\t\t}\n\n\t\t\tp = q;\n\n\t\t}\n\n\t\ttail.nextZ = null;\n\t\tinSize *= 2;\n\n\t} while ( numMerges > 1 );\n\n\treturn list;\n\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\n\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\n\n\tx = 32767 * ( x - minX ) * invSize;\n\ty = 32767 * ( y - minY ) * invSize;\n\n\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\treturn x | ( y << 1 );\n\n}\n\n// find the leftmost node of a polygon ring\n\nfunction getLeftmost( start ) {\n\n\tvar p = start, leftmost = start;\n\n\tdo {\n\n\t\tif ( p.x < leftmost.x ) leftmost = p;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn leftmost;\n\n}\n\n// check if a point lies within a convex triangle\n\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 &&\n\t ( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 &&\n\t ( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0;\n\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\n\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) &&\n\t\tlocallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b );\n\n}\n\n// signed area of a triangle\n\nfunction area( p, q, r ) {\n\n\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n}\n\n// check if two points are equal\n\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\n\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tif ( ( equals( p1, q1 ) && equals( p2, q2 ) ) ||\n\t\t\t( equals( p1, q2 ) && equals( p2, q1 ) ) ) return true;\n\n\treturn area( p1, q1, p2 ) > 0 !== area( p1, q1, q2 ) > 0 &&\n\t\t\t\t area( p2, q2, p1 ) > 0 !== area( p2, q2, q1 ) > 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\n\nfunction intersectsPolygon( a, b ) {\n\n\tvar p = a;\n\n\tdo {\n\n\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\t\t\t\tintersects( p, p.next, a, b ) ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn false;\n\n}\n\n// check if a polygon diagonal is locally inside the polygon\n\nfunction locallyInside( a, b ) {\n\n\treturn area( a.prev, a, a.next ) < 0 ?\n\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\n\nfunction middleInside( a, b ) {\n\n\tvar p = a,\n\t\tinside = false,\n\t\tpx = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) ) {\n\n\t\t\tinside = ! inside;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn inside;\n\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\n\nfunction splitPolygon( a, b ) {\n\n\tvar a2 = new Node( a.i, a.x, a.y ),\n\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\tan = a.next,\n\t\tbp = b.prev;\n\n\ta.next = b;\n\tb.prev = a;\n\n\ta2.next = an;\n\tan.prev = a2;\n\n\tb2.next = a2;\n\ta2.prev = b2;\n\n\tbp.next = b2;\n\tb2.prev = bp;\n\n\treturn b2;\n\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\n\nfunction insertNode( i, x, y, last ) {\n\n\tvar p = new Node( i, x, y );\n\n\tif ( ! last ) {\n\n\t\tp.prev = p;\n\t\tp.next = p;\n\n\t} else {\n\n\t\tp.next = last.next;\n\t\tp.prev = last;\n\t\tlast.next.prev = p;\n\t\tlast.next = p;\n\n\t}\n\n\treturn p;\n\n}\n\nfunction removeNode( p ) {\n\n\tp.next.prev = p.prev;\n\tp.prev.next = p.next;\n\n\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n}\n\nfunction Node( i, x, y ) {\n\n\t// vertice index in coordinates array\n\tthis.i = i;\n\n\t// vertex coordinates\n\tthis.x = x;\n\tthis.y = y;\n\n\t// previous and next vertice nodes in a polygon ring\n\tthis.prev = null;\n\tthis.next = null;\n\n\t// z-order curve value\n\tthis.z = null;\n\n\t// previous and next nodes in z-order\n\tthis.prevZ = null;\n\tthis.nextZ = null;\n\n\t// indicates whether this is a steiner point\n\tthis.steiner = false;\n\n}\n\nfunction signedArea( data, start, end, dim ) {\n\n\tvar sum = 0;\n\n\tfor ( var i = start, j = end - dim; i < end; i += dim ) {\n\n\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\tj = i;\n\n\t}\n\n\treturn sum;\n\n}\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n */\n\nvar ShapeUtils = {\n\n\t// calculate area of the contour polygon\n\n\tarea: function ( contour ) {\n\n\t\tvar n = contour.length;\n\t\tvar a = 0.0;\n\n\t\tfor ( var p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t},\n\n\tisClockWise: function ( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t},\n\n\ttriangulateShape: function ( contour, holes ) {\n\n\t\tvar vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tvar holeIndices = []; // array of hole indices\n\t\tvar faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tvar holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( var i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tvar triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( var i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n};\n\nfunction removeDupEndPts( points ) {\n\n\tvar l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( var i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n *\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n * curveSegments: <int>, // number of points on the curves\n * steps: <int>, // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * depth: <float>, // Depth to extrude the shape\n *\n * bevelEnabled: <bool>, // turn on bevel\n * bevelThickness: <float>, // how deep into the original shape bevel goes\n * bevelSize: <float>, // how far from shape outline is bevel\n * bevelSegments: <int>, // number of bevel layers\n *\n * extrudePath: <THREE.Curve> // curve to extrude shape along\n *\n * UVGenerator: <Object> // object that provides UV generator functions\n *\n * }\n */\n\n// ExtrudeGeometry\n\nfunction ExtrudeGeometry( shapes, options ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'ExtrudeGeometry';\n\n\tthis.parameters = {\n\t\tshapes: shapes,\n\t\toptions: options\n\t};\n\n\tthis.fromBufferGeometry( new ExtrudeBufferGeometry( shapes, options ) );\n\tthis.mergeVertices();\n\n}\n\nExtrudeGeometry.prototype = Object.create( Geometry.prototype );\nExtrudeGeometry.prototype.constructor = ExtrudeGeometry;\n\nExtrudeGeometry.prototype.toJSON = function () {\n\n\tvar data = Geometry.prototype.toJSON.call( this );\n\n\tvar shapes = this.parameters.shapes;\n\tvar options = this.parameters.options;\n\n\treturn toJSON( shapes, options, data );\n\n};\n\n// ExtrudeBufferGeometry\n\nfunction ExtrudeBufferGeometry( shapes, options ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'ExtrudeBufferGeometry';\n\n\tthis.parameters = {\n\t\tshapes: shapes,\n\t\toptions: options\n\t};\n\n\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\tvar scope = this;\n\n\tvar verticesArray = [];\n\tvar uvArray = [];\n\n\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\tvar shape = shapes[ i ];\n\t\taddShape( shape );\n\n\t}\n\n\t// build geometry\n\n\tthis.addAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\tthis.computeVertexNormals();\n\n\t// functions\n\n\tfunction addShape( shape ) {\n\n\t\tvar placeholder = [];\n\n\t\t// options\n\n\t\tvar curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\tvar steps = options.steps !== undefined ? options.steps : 1;\n\t\tvar depth = options.depth !== undefined ? options.depth : 100;\n\n\t\tvar bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\tvar bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6;\n\t\tvar bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2;\n\t\tvar bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\tvar extrudePath = options.extrudePath;\n\n\t\tvar uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t// deprecated options\n\n\t\tif ( options.amount !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' );\n\t\t\tdepth = options.amount;\n\n\t\t}\n\n\t\t//\n\n\t\tvar extrudePts, extrudeByPath = false;\n\t\tvar splineTube, binormal, normal, position2;\n\n\t\tif ( extrudePath ) {\n\n\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\textrudeByPath = true;\n\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t// SETUP TNB variables\n\n\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\tbinormal = new Vector3();\n\t\t\tnormal = new Vector3();\n\t\t\tposition2 = new Vector3();\n\n\t\t}\n\n\t\t// Safeguards if bevels are not enabled\n\n\t\tif ( ! bevelEnabled ) {\n\n\t\t\tbevelSegments = 0;\n\t\t\tbevelThickness = 0;\n\t\t\tbevelSize = 0;\n\n\t\t}\n\n\t\t// Variables initialization\n\n\t\tvar ahole, h, hl; // looping of holes\n\n\t\tvar shapePoints = shape.extractPoints( curveSegments );\n\n\t\tvar vertices = shapePoints.shape;\n\t\tvar holes = shapePoints.holes;\n\n\t\tvar reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\tif ( reverse ) {\n\n\t\t\tvertices = vertices.reverse();\n\n\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tvar faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t/* Vertices */\n\n\t\tvar contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\tahole = holes[ h ];\n\n\t\t\tvertices = vertices.concat( ahole );\n\n\t\t}\n\n\n\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\tif ( ! vec ) console.error( \"THREE.ExtrudeGeometry: vec does not exist\" );\n\n\t\t\treturn vec.clone().multiplyScalar( size ).add( pt );\n\n\t\t}\n\n\t\tvar b, bs, t, z,\n\t\t\tvert, vlen = vertices.length,\n\t\t\tface, flen = faces.length;\n\n\n\t\t// Find directions for point movement\n\n\n\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t// shifted by 1 unit (length of normalized vector) to the left\n\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t//\n\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\tvar v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\tvar v_prev_x = inPt.x - inPrev.x,\n\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\tvar v_next_x = inNext.x - inPt.x,\n\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\tvar v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t// check for collinear edges\n\t\t\tvar collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t// not collinear\n\n\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\tvar v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\tvar v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\tvar ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\tvar ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\tvar ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\tvar ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\tvar sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t// but prevent crazy spikes\n\t\t\t\tvar v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\tvar direction_eq = false; // assumes: opposite\n\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( direction_eq ) {\n\n\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t}\n\n\n\t\tvar contourMovements = [];\n\n\t\tfor ( var i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\tif ( j === il ) j = 0;\n\t\t\tif ( k === il ) k = 0;\n\n\t\t\t// (j)---(i)---(k)\n\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t}\n\n\t\tvar holesMovements = [],\n\t\t\toneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\tahole = holes[ h ];\n\n\t\t\toneHoleMovements = [];\n\n\t\t\tfor ( i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t// (j)---(i)---(k)\n\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t}\n\n\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t}\n\n\n\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\tfor ( b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\tt = b / bevelSegments;\n\t\t\tz = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\tbs = bevelSize * Math.sin( t * Math.PI / 2 );\n\n\t\t\t// contract shape\n\n\t\t\tfor ( i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\tvert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t}\n\n\t\t\t// expand holes\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\tfor ( i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\tvert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tbs = bevelSize;\n\n\t\t// Back facing vertices\n\n\t\tfor ( i = 0; i < vlen; i ++ ) {\n\n\t\t\tvert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t} else {\n\n\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Add stepped vertices...\n\t\t// Including front facing vertices\n\n\t\tvar s;\n\n\t\tfor ( s = 1; s <= steps; s ++ ) {\n\n\t\t\tfor ( i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tvert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// Add bevel segments planes\n\n\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\tfor ( b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\tt = b / bevelSegments;\n\t\t\tz = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\tbs = bevelSize * Math.sin( t * Math.PI / 2 );\n\n\t\t\t// contract shape\n\n\t\t\tfor ( i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\tvert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t}\n\n\t\t\t// expand holes\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\tfor ( i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\tvert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t/* Faces */\n\n\t\t// Top and bottom faces\n\n\t\tbuildLidFaces();\n\n\t\t// Sides faces\n\n\t\tbuildSideFaces();\n\n\n\t\t///// Internal functions\n\n\t\tfunction buildLidFaces() {\n\n\t\t\tvar start = verticesArray.length / 3;\n\n\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\tvar layer = 0; // steps + 1\n\t\t\t\tvar offset = vlen * layer;\n\n\t\t\t\t// Bottom faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t}\n\n\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t// Top faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Bottom faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t}\n\n\t\t\t\t// Top faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t}\n\n\t\t// Create faces for the z-sides of the shape\n\n\t\tfunction buildSideFaces() {\n\n\t\t\tvar start = verticesArray.length / 3;\n\t\t\tvar layeroffset = 0;\n\t\t\tsidewalls( contour, layeroffset );\n\t\t\tlayeroffset += contour.length;\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t//, true\n\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t}\n\n\n\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t}\n\n\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\tvar j, k;\n\t\t\ti = contour.length;\n\n\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\tj = i;\n\t\t\t\tk = i - 1;\n\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\tvar s = 0,\n\t\t\t\t\tsl = steps + bevelSegments * 2;\n\n\t\t\t\tfor ( s = 0; s < sl; s ++ ) {\n\n\t\t\t\t\tvar slen1 = vlen * s;\n\t\t\t\t\tvar slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\tvar a = layeroffset + j + slen1,\n\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction v( x, y, z ) {\n\n\t\t\tplaceholder.push( x );\n\t\t\tplaceholder.push( y );\n\t\t\tplaceholder.push( z );\n\n\t\t}\n\n\n\t\tfunction f3( a, b, c ) {\n\n\t\t\taddVertex( a );\n\t\t\taddVertex( b );\n\t\t\taddVertex( c );\n\n\t\t\tvar nextIndex = verticesArray.length / 3;\n\t\t\tvar uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\taddUV( uvs[ 0 ] );\n\t\t\taddUV( uvs[ 1 ] );\n\t\t\taddUV( uvs[ 2 ] );\n\n\t\t}\n\n\t\tfunction f4( a, b, c, d ) {\n\n\t\t\taddVertex( a );\n\t\t\taddVertex( b );\n\t\t\taddVertex( d );\n\n\t\t\taddVertex( b );\n\t\t\taddVertex( c );\n\t\t\taddVertex( d );\n\n\n\t\t\tvar nextIndex = verticesArray.length / 3;\n\t\t\tvar uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\taddUV( uvs[ 0 ] );\n\t\t\taddUV( uvs[ 1 ] );\n\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\taddUV( uvs[ 1 ] );\n\t\t\taddUV( uvs[ 2 ] );\n\t\t\taddUV( uvs[ 3 ] );\n\n\t\t}\n\n\t\tfunction addVertex( index ) {\n\n\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t}\n\n\n\t\tfunction addUV( vector2 ) {\n\n\t\t\tuvArray.push( vector2.x );\n\t\t\tuvArray.push( vector2.y );\n\n\t\t}\n\n\t}\n\n}\n\nExtrudeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nExtrudeBufferGeometry.prototype.constructor = ExtrudeBufferGeometry;\n\nExtrudeBufferGeometry.prototype.toJSON = function () {\n\n\tvar data = BufferGeometry.prototype.toJSON.call( this );\n\n\tvar shapes = this.parameters.shapes;\n\tvar options = this.parameters.options;\n\n\treturn toJSON( shapes, options, data );\n\n};\n\n//\n\nvar WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tvar a_x = vertices[ indexA * 3 ];\n\t\tvar a_y = vertices[ indexA * 3 + 1 ];\n\t\tvar b_x = vertices[ indexB * 3 ];\n\t\tvar b_y = vertices[ indexB * 3 + 1 ];\n\t\tvar c_x = vertices[ indexC * 3 ];\n\t\tvar c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew Vector2( a_x, a_y ),\n\t\t\tnew Vector2( b_x, b_y ),\n\t\t\tnew Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tvar a_x = vertices[ indexA * 3 ];\n\t\tvar a_y = vertices[ indexA * 3 + 1 ];\n\t\tvar a_z = vertices[ indexA * 3 + 2 ];\n\t\tvar b_x = vertices[ indexB * 3 ];\n\t\tvar b_y = vertices[ indexB * 3 + 1 ];\n\t\tvar b_z = vertices[ indexB * 3 + 2 ];\n\t\tvar c_x = vertices[ indexC * 3 ];\n\t\tvar c_y = vertices[ indexC * 3 + 1 ];\n\t\tvar c_z = vertices[ indexC * 3 + 2 ];\n\t\tvar d_x = vertices[ indexD * 3 ];\n\t\tvar d_y = vertices[ indexD * 3 + 1 ];\n\t\tvar d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < 0.01 ) {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n};\n\nfunction toJSON( shapes, options, data ) {\n\n\t//\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tvar shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\t//\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author alteredq / http://alteredqualia.com/\n *\n * Text = 3D Text\n *\n * parameters = {\n * font: <THREE.Font>, // font\n *\n * size: <float>, // size of the text\n * height: <float>, // thickness to extrude text\n * curveSegments: <int>, // number of points on the curves\n *\n * bevelEnabled: <bool>, // turn on bevel\n * bevelThickness: <float>, // how deep into text bevel goes\n * bevelSize: <float> // how far from text outline is bevel\n * }\n */\n\n// TextGeometry\n\nfunction TextGeometry( text, parameters ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TextGeometry';\n\n\tthis.parameters = {\n\t\ttext: text,\n\t\tparameters: parameters\n\t};\n\n\tthis.fromBufferGeometry( new TextBufferGeometry( text, parameters ) );\n\tthis.mergeVertices();\n\n}\n\nTextGeometry.prototype = Object.create( Geometry.prototype );\nTextGeometry.prototype.constructor = TextGeometry;\n\n// TextBufferGeometry\n\nfunction TextBufferGeometry( text, parameters ) {\n\n\tparameters = parameters || {};\n\n\tvar font = parameters.font;\n\n\tif ( ! ( font && font.isFont ) ) {\n\n\t\tconsole.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' );\n\t\treturn new Geometry();\n\n\t}\n\n\tvar shapes = font.generateShapes( text, parameters.size );\n\n\t// translate parameters to ExtrudeGeometry API\n\n\tparameters.depth = parameters.height !== undefined ? parameters.height : 50;\n\n\t// defaults\n\n\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\n\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\n\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\n\n\tExtrudeBufferGeometry.call( this, shapes, parameters );\n\n\tthis.type = 'TextBufferGeometry';\n\n}\n\nTextBufferGeometry.prototype = Object.create( ExtrudeBufferGeometry.prototype );\nTextBufferGeometry.prototype.constructor = TextBufferGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author benaadams / https://twitter.com/ben_a_adams\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// SphereGeometry\n\nfunction SphereGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'SphereGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nSphereGeometry.prototype = Object.create( Geometry.prototype );\nSphereGeometry.prototype.constructor = SphereGeometry;\n\n// SphereBufferGeometry\n\nfunction SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'SphereBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tradius = radius || 1;\n\n\twidthSegments = Math.max( 3, Math.floor( widthSegments ) || 8 );\n\theightSegments = Math.max( 2, Math.floor( heightSegments ) || 6 );\n\n\tphiStart = phiStart !== undefined ? phiStart : 0;\n\tphiLength = phiLength !== undefined ? phiLength : Math.PI * 2;\n\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI;\n\n\tvar thetaEnd = thetaStart + thetaLength;\n\n\tvar ix, iy;\n\n\tvar index = 0;\n\tvar grid = [];\n\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// generate vertices, normals and uvs\n\n\tfor ( iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\tvar verticesRow = [];\n\n\t\tvar v = iy / heightSegments;\n\n\t\tfor ( ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\tvar u = ix / widthSegments;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormal.set( vertex.x, vertex.y, vertex.z ).normalize();\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( u, 1 - v );\n\n\t\t\tverticesRow.push( index ++ );\n\n\t\t}\n\n\t\tgrid.push( verticesRow );\n\n\t}\n\n\t// indices\n\n\tfor ( iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\tfor ( ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\tvar a = grid[ iy ][ ix + 1 ];\n\t\t\tvar b = grid[ iy ][ ix ];\n\t\t\tvar c = grid[ iy + 1 ][ ix ];\n\t\t\tvar d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nSphereBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nSphereBufferGeometry.prototype.constructor = SphereBufferGeometry;\n\n/**\n * @author Kaleb Murphy\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// RingGeometry\n\nfunction RingGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'RingGeometry';\n\n\tthis.parameters = {\n\t\tinnerRadius: innerRadius,\n\t\touterRadius: outerRadius,\n\t\tthetaSegments: thetaSegments,\n\t\tphiSegments: phiSegments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nRingGeometry.prototype = Object.create( Geometry.prototype );\nRingGeometry.prototype.constructor = RingGeometry;\n\n// RingBufferGeometry\n\nfunction RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'RingBufferGeometry';\n\n\tthis.parameters = {\n\t\tinnerRadius: innerRadius,\n\t\touterRadius: outerRadius,\n\t\tthetaSegments: thetaSegments,\n\t\tphiSegments: phiSegments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tinnerRadius = innerRadius || 0.5;\n\touterRadius = outerRadius || 1;\n\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\tthetaSegments = thetaSegments !== undefined ? Math.max( 3, thetaSegments ) : 8;\n\tphiSegments = phiSegments !== undefined ? Math.max( 1, phiSegments ) : 1;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// some helper variables\n\n\tvar segment;\n\tvar radius = innerRadius;\n\tvar radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\tvar vertex = new Vector3();\n\tvar uv = new Vector2();\n\tvar j, i;\n\n\t// generate vertices, normals and uvs\n\n\tfor ( j = 0; j <= phiSegments; j ++ ) {\n\n\t\tfor ( i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\tsegment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uv\n\n\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// increase the radius for next row of vertices\n\n\t\tradius += radiusStep;\n\n\t}\n\n\t// indices\n\n\tfor ( j = 0; j < phiSegments; j ++ ) {\n\n\t\tvar thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\tfor ( i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\tsegment = i + thetaSegmentLevel;\n\n\t\t\tvar a = segment;\n\t\t\tvar b = segment + thetaSegments + 1;\n\t\t\tvar c = segment + thetaSegments + 2;\n\t\t\tvar d = segment + 1;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nRingBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nRingBufferGeometry.prototype.constructor = RingBufferGeometry;\n\n/**\n * @author astrodud / http://astrodud.isgreat.org/\n * @author zz85 / https://github.com/zz85\n * @author bhouston / http://clara.io\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// LatheGeometry\n\nfunction LatheGeometry( points, segments, phiStart, phiLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'LatheGeometry';\n\n\tthis.parameters = {\n\t\tpoints: points,\n\t\tsegments: segments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength\n\t};\n\n\tthis.fromBufferGeometry( new LatheBufferGeometry( points, segments, phiStart, phiLength ) );\n\tthis.mergeVertices();\n\n}\n\nLatheGeometry.prototype = Object.create( Geometry.prototype );\nLatheGeometry.prototype.constructor = LatheGeometry;\n\n// LatheBufferGeometry\n\nfunction LatheBufferGeometry( points, segments, phiStart, phiLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'LatheBufferGeometry';\n\n\tthis.parameters = {\n\t\tpoints: points,\n\t\tsegments: segments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength\n\t};\n\n\tsegments = Math.floor( segments ) || 12;\n\tphiStart = phiStart || 0;\n\tphiLength = phiLength || Math.PI * 2;\n\n\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\tphiLength = _Math.clamp( phiLength, 0, Math.PI * 2 );\n\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar base;\n\tvar inverseSegments = 1.0 / segments;\n\tvar vertex = new Vector3();\n\tvar uv = new Vector2();\n\tvar i, j;\n\n\t// generate vertices and uvs\n\n\tfor ( i = 0; i <= segments; i ++ ) {\n\n\t\tvar phi = phiStart + i * inverseSegments * phiLength;\n\n\t\tvar sin = Math.sin( phi );\n\t\tvar cos = Math.cos( phi );\n\n\t\tfor ( j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\tvertex.y = points[ j ].y;\n\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// uv\n\n\t\t\tuv.x = i / segments;\n\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tfor ( i = 0; i < segments; i ++ ) {\n\n\t\tfor ( j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\tbase = j + i * points.length;\n\n\t\t\tvar a = base;\n\t\t\tvar b = base + points.length;\n\t\t\tvar c = base + points.length + 1;\n\t\t\tvar d = base + 1;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t// generate normals\n\n\tthis.computeVertexNormals();\n\n\t// if the geometry is closed, we need to average the normals along the seam.\n\t// because the corresponding vertices are identical (but still have different UVs).\n\n\tif ( phiLength === Math.PI * 2 ) {\n\n\t\tvar normals = this.attributes.normal.array;\n\t\tvar n1 = new Vector3();\n\t\tvar n2 = new Vector3();\n\t\tvar n = new Vector3();\n\n\t\t// this is the buffer offset for the last line of vertices\n\n\t\tbase = segments * points.length * 3;\n\n\t\tfor ( i = 0, j = 0; i < points.length; i ++, j += 3 ) {\n\n\t\t\t// select the normal of the vertex in the first line\n\n\t\t\tn1.x = normals[ j + 0 ];\n\t\t\tn1.y = normals[ j + 1 ];\n\t\t\tn1.z = normals[ j + 2 ];\n\n\t\t\t// select the normal of the vertex in the last line\n\n\t\t\tn2.x = normals[ base + j + 0 ];\n\t\t\tn2.y = normals[ base + j + 1 ];\n\t\t\tn2.z = normals[ base + j + 2 ];\n\n\t\t\t// average normals\n\n\t\t\tn.addVectors( n1, n2 ).normalize();\n\n\t\t\t// assign the new values to both normals\n\n\t\t\tnormals[ j + 0 ] = normals[ base + j + 0 ] = n.x;\n\t\t\tnormals[ j + 1 ] = normals[ base + j + 1 ] = n.y;\n\t\t\tnormals[ j + 2 ] = normals[ base + j + 2 ] = n.z;\n\n\t\t}\n\n\t}\n\n}\n\nLatheBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nLatheBufferGeometry.prototype.constructor = LatheBufferGeometry;\n\n/**\n * @author jonobr1 / http://jonobr1.com\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// ShapeGeometry\n\nfunction ShapeGeometry( shapes, curveSegments ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'ShapeGeometry';\n\n\tif ( typeof curveSegments === 'object' ) {\n\n\t\tconsole.warn( 'THREE.ShapeGeometry: Options parameter has been removed.' );\n\n\t\tcurveSegments = curveSegments.curveSegments;\n\n\t}\n\n\tthis.parameters = {\n\t\tshapes: shapes,\n\t\tcurveSegments: curveSegments\n\t};\n\n\tthis.fromBufferGeometry( new ShapeBufferGeometry( shapes, curveSegments ) );\n\tthis.mergeVertices();\n\n}\n\nShapeGeometry.prototype = Object.create( Geometry.prototype );\nShapeGeometry.prototype.constructor = ShapeGeometry;\n\nShapeGeometry.prototype.toJSON = function () {\n\n\tvar data = Geometry.prototype.toJSON.call( this );\n\n\tvar shapes = this.parameters.shapes;\n\n\treturn toJSON$1( shapes, data );\n\n};\n\n// ShapeBufferGeometry\n\nfunction ShapeBufferGeometry( shapes, curveSegments ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'ShapeBufferGeometry';\n\n\tthis.parameters = {\n\t\tshapes: shapes,\n\t\tcurveSegments: curveSegments\n\t};\n\n\tcurveSegments = curveSegments || 12;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar groupStart = 0;\n\tvar groupCount = 0;\n\n\t// allow single and array values for \"shapes\" parameter\n\n\tif ( Array.isArray( shapes ) === false ) {\n\n\t\taddShape( shapes );\n\n\t} else {\n\n\t\tfor ( var i = 0; i < shapes.length; i ++ ) {\n\n\t\t\taddShape( shapes[ i ] );\n\n\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\tgroupStart += groupCount;\n\t\t\tgroupCount = 0;\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t// helper functions\n\n\tfunction addShape( shape ) {\n\n\t\tvar i, l, shapeHole;\n\n\t\tvar indexOffset = vertices.length / 3;\n\t\tvar points = shape.extractPoints( curveSegments );\n\n\t\tvar shapeVertices = points.shape;\n\t\tvar shapeHoles = points.holes;\n\n\t\t// check direction of vertices\n\n\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t// also check if holes are in the opposite direction\n\n\t\t\tfor ( i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tshapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t// join vertices of inner and outer paths to a single array\n\n\t\tfor ( i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\tshapeHole = shapeHoles[ i ];\n\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t}\n\n\t\t// vertices, normals, uvs\n\n\t\tfor ( i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\tvar vertex = shapeVertices[ i ];\n\n\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\tnormals.push( 0, 0, 1 );\n\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t}\n\n\t\t// incides\n\n\t\tfor ( i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tvar a = face[ 0 ] + indexOffset;\n\t\t\tvar b = face[ 1 ] + indexOffset;\n\t\t\tvar c = face[ 2 ] + indexOffset;\n\n\t\t\tindices.push( a, b, c );\n\t\t\tgroupCount += 3;\n\n\t\t}\n\n\t}\n\n}\n\nShapeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nShapeBufferGeometry.prototype.constructor = ShapeBufferGeometry;\n\nShapeBufferGeometry.prototype.toJSON = function () {\n\n\tvar data = BufferGeometry.prototype.toJSON.call( this );\n\n\tvar shapes = this.parameters.shapes;\n\n\treturn toJSON$1( shapes, data );\n\n};\n\n//\n\nfunction toJSON$1( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tvar shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction EdgesGeometry( geometry, thresholdAngle ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'EdgesGeometry';\n\n\tthis.parameters = {\n\t\tthresholdAngle: thresholdAngle\n\t};\n\n\tthresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1;\n\n\t// buffer\n\n\tvar vertices = [];\n\n\t// helper variables\n\n\tvar thresholdDot = Math.cos( _Math.DEG2RAD * thresholdAngle );\n\tvar edge = [ 0, 0 ], edges = {}, edge1, edge2;\n\tvar key, keys = [ 'a', 'b', 'c' ];\n\n\t// prepare source geometry\n\n\tvar geometry2;\n\n\tif ( geometry.isBufferGeometry ) {\n\n\t\tgeometry2 = new Geometry();\n\t\tgeometry2.fromBufferGeometry( geometry );\n\n\t} else {\n\n\t\tgeometry2 = geometry.clone();\n\n\t}\n\n\tgeometry2.mergeVertices();\n\tgeometry2.computeFaceNormals();\n\n\tvar sourceVertices = geometry2.vertices;\n\tvar faces = geometry2.faces;\n\n\t// now create a data structure where each entry represents an edge with its adjoining faces\n\n\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\tvar face = faces[ i ];\n\n\t\tfor ( var j = 0; j < 3; j ++ ) {\n\n\t\t\tedge1 = face[ keys[ j ] ];\n\t\t\tedge2 = face[ keys[ ( j + 1 ) % 3 ] ];\n\t\t\tedge[ 0 ] = Math.min( edge1, edge2 );\n\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ], face1: i, face2: undefined };\n\n\t\t\t} else {\n\n\t\t\t\tedges[ key ].face2 = i;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// generate vertices\n\n\tfor ( key in edges ) {\n\n\t\tvar e = edges[ key ];\n\n\t\t// an edge is only rendered if the angle (in degrees) between the face normals of the adjoining faces exceeds this value. default = 1 degree.\n\n\t\tif ( e.face2 === undefined || faces[ e.face1 ].normal.dot( faces[ e.face2 ].normal ) <= thresholdDot ) {\n\n\t\t\tvar vertex = sourceVertices[ e.index1 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\tvertex = sourceVertices[ e.index2 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n}\n\nEdgesGeometry.prototype = Object.create( BufferGeometry.prototype );\nEdgesGeometry.prototype.constructor = EdgesGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// CylinderGeometry\n\nfunction CylinderGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'CylinderGeometry';\n\n\tthis.parameters = {\n\t\tradiusTop: radiusTop,\n\t\tradiusBottom: radiusBottom,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nCylinderGeometry.prototype = Object.create( Geometry.prototype );\nCylinderGeometry.prototype.constructor = CylinderGeometry;\n\n// CylinderBufferGeometry\n\nfunction CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'CylinderBufferGeometry';\n\n\tthis.parameters = {\n\t\tradiusTop: radiusTop,\n\t\tradiusBottom: radiusBottom,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tvar scope = this;\n\n\tradiusTop = radiusTop !== undefined ? radiusTop : 1;\n\tradiusBottom = radiusBottom !== undefined ? radiusBottom : 1;\n\theight = height || 1;\n\n\tradialSegments = Math.floor( radialSegments ) || 8;\n\theightSegments = Math.floor( heightSegments ) || 1;\n\n\topenEnded = openEnded !== undefined ? openEnded : false;\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0.0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar index = 0;\n\tvar indexArray = [];\n\tvar halfHeight = height / 2;\n\tvar groupStart = 0;\n\n\t// generate geometry\n\n\tgenerateTorso();\n\n\tif ( openEnded === false ) {\n\n\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\tfunction generateTorso() {\n\n\t\tvar x, y;\n\t\tvar normal = new Vector3();\n\t\tvar vertex = new Vector3();\n\n\t\tvar groupCount = 0;\n\n\t\t// this will be used to calculate the normal\n\t\tvar slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\tvar indexRow = [];\n\n\t\t\tvar v = y / heightSegments;\n\n\t\t\t// calculate the radius of the current row\n\n\t\t\tvar radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\tfor ( x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tvar u = x / radialSegments;\n\n\t\t\t\tvar theta = u * thetaLength + thetaStart;\n\n\t\t\t\tvar sinTheta = Math.sin( theta );\n\t\t\t\tvar cosTheta = Math.cos( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\t// now save vertices of the row in our index array\n\n\t\t\tindexArray.push( indexRow );\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( x = 0; x < radialSegments; x ++ ) {\n\n\t\t\tfor ( y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\tvar a = indexArray[ y ][ x ];\n\t\t\t\tvar b = indexArray[ y + 1 ][ x ];\n\t\t\t\tvar c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\tvar d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t// update group counter\n\n\t\t\t\tgroupCount += 6;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t// calculate new start value for groups\n\n\t\tgroupStart += groupCount;\n\n\t}\n\n\tfunction generateCap( top ) {\n\n\t\tvar x, centerIndexStart, centerIndexEnd;\n\n\t\tvar uv = new Vector2();\n\t\tvar vertex = new Vector3();\n\n\t\tvar groupCount = 0;\n\n\t\tvar radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\tvar sign = ( top === true ) ? 1 : - 1;\n\n\t\t// save the index of the first center vertex\n\t\tcenterIndexStart = index;\n\n\t\t// first we generate the center vertex data of the cap.\n\t\t// because the geometry needs one set of uvs per face,\n\t\t// we must generate a center vertex per face/segment\n\n\t\tfor ( x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t// vertex\n\n\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t// increase index\n\n\t\t\tindex ++;\n\n\t\t}\n\n\t\t// save the index of the last center vertex\n\n\t\tcenterIndexEnd = index;\n\n\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\tfor ( x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\tvar u = x / radialSegments;\n\t\t\tvar theta = u * thetaLength + thetaStart;\n\n\t\t\tvar cosTheta = Math.cos( theta );\n\t\t\tvar sinTheta = Math.sin( theta );\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * sinTheta;\n\t\t\tvertex.y = halfHeight * sign;\n\t\t\tvertex.z = radius * cosTheta;\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t// uv\n\n\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t// increase index\n\n\t\t\tindex ++;\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( x = 0; x < radialSegments; x ++ ) {\n\n\t\t\tvar c = centerIndexStart + x;\n\t\t\tvar i = centerIndexEnd + x;\n\n\t\t\tif ( top === true ) {\n\n\t\t\t\t// face top\n\n\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t} else {\n\n\t\t\t\t// face bottom\n\n\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t}\n\n\t\t\tgroupCount += 3;\n\n\t\t}\n\n\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t// calculate new start value for groups\n\n\t\tgroupStart += groupCount;\n\n\t}\n\n}\n\nCylinderBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nCylinderBufferGeometry.prototype.constructor = CylinderBufferGeometry;\n\n/**\n * @author abelnation / http://github.com/abelnation\n */\n\n// ConeGeometry\n\nfunction ConeGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tCylinderGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\tthis.type = 'ConeGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n}\n\nConeGeometry.prototype = Object.create( CylinderGeometry.prototype );\nConeGeometry.prototype.constructor = ConeGeometry;\n\n// ConeBufferGeometry\n\nfunction ConeBufferGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tCylinderBufferGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\tthis.type = 'ConeBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n}\n\nConeBufferGeometry.prototype = Object.create( CylinderBufferGeometry.prototype );\nConeBufferGeometry.prototype.constructor = ConeBufferGeometry;\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n * @author Mugen87 / https://github.com/Mugen87\n * @author hughes\n */\n\n// CircleGeometry\n\nfunction CircleGeometry( radius, segments, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'CircleGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tsegments: segments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nCircleGeometry.prototype = Object.create( Geometry.prototype );\nCircleGeometry.prototype.constructor = CircleGeometry;\n\n// CircleBufferGeometry\n\nfunction CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'CircleBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tsegments: segments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tradius = radius || 1;\n\tsegments = segments !== undefined ? Math.max( 3, segments ) : 8;\n\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar i, s;\n\tvar vertex = new Vector3();\n\tvar uv = new Vector2();\n\n\t// center point\n\n\tvertices.push( 0, 0, 0 );\n\tnormals.push( 0, 0, 1 );\n\tuvs.push( 0.5, 0.5 );\n\n\tfor ( s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\tvar segment = thetaStart + s / segments * thetaLength;\n\n\t\t// vertex\n\n\t\tvertex.x = radius * Math.cos( segment );\n\t\tvertex.y = radius * Math.sin( segment );\n\n\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t// normal\n\n\t\tnormals.push( 0, 0, 1 );\n\n\t\t// uvs\n\n\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\tuvs.push( uv.x, uv.y );\n\n\t}\n\n\t// indices\n\n\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\tindices.push( i, i + 1, 0 );\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nCircleBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nCircleBufferGeometry.prototype.constructor = CircleBufferGeometry;\n\n\n\nvar Geometries = /*#__PURE__*/Object.freeze({\n\tWireframeGeometry: WireframeGeometry,\n\tParametricGeometry: ParametricGeometry,\n\tParametricBufferGeometry: ParametricBufferGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTetrahedronBufferGeometry: TetrahedronBufferGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tOctahedronBufferGeometry: OctahedronBufferGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tIcosahedronBufferGeometry: IcosahedronBufferGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tDodecahedronBufferGeometry: DodecahedronBufferGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tPolyhedronBufferGeometry: PolyhedronBufferGeometry,\n\tTubeGeometry: TubeGeometry,\n\tTubeBufferGeometry: TubeBufferGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTorusKnotBufferGeometry: TorusKnotBufferGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusBufferGeometry: TorusBufferGeometry,\n\tTextGeometry: TextGeometry,\n\tTextBufferGeometry: TextBufferGeometry,\n\tSphereGeometry: SphereGeometry,\n\tSphereBufferGeometry: SphereBufferGeometry,\n\tRingGeometry: RingGeometry,\n\tRingBufferGeometry: RingBufferGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPlaneBufferGeometry: PlaneBufferGeometry,\n\tLatheGeometry: LatheGeometry,\n\tLatheBufferGeometry: LatheBufferGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tShapeBufferGeometry: ShapeBufferGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tExtrudeBufferGeometry: ExtrudeBufferGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tConeGeometry: ConeGeometry,\n\tConeBufferGeometry: ConeBufferGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tCylinderBufferGeometry: CylinderBufferGeometry,\n\tCircleGeometry: CircleGeometry,\n\tCircleBufferGeometry: CircleBufferGeometry,\n\tBoxGeometry: BoxGeometry,\n\tBoxBufferGeometry: BoxBufferGeometry\n});\n\n/**\n * @author mrdoob / http://mrdoob.com/\n *\n * parameters = {\n * color: <THREE.Color>\n * }\n */\n\nfunction ShadowMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'ShadowMaterial';\n\n\tthis.color = new Color( 0x000000 );\n\tthis.transparent = true;\n\n\tthis.setValues( parameters );\n\n}\n\nShadowMaterial.prototype = Object.create( Material.prototype );\nShadowMaterial.prototype.constructor = ShadowMaterial;\n\nShadowMaterial.prototype.isShadowMaterial = true;\n\nShadowMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction RawShaderMaterial( parameters ) {\n\n\tShaderMaterial.call( this, parameters );\n\n\tthis.type = 'RawShaderMaterial';\n\n}\n\nRawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype );\nRawShaderMaterial.prototype.constructor = RawShaderMaterial;\n\nRawShaderMaterial.prototype.isRawShaderMaterial = true;\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n * color: <hex>,\n * roughness: <float>,\n * metalness: <float>,\n * opacity: <float>,\n *\n * map: new THREE.Texture( <Image> ),\n *\n * lightMap: new THREE.Texture( <Image> ),\n * lightMapIntensity: <float>\n *\n * aoMap: new THREE.Texture( <Image> ),\n * aoMapIntensity: <float>\n *\n * emissive: <hex>,\n * emissiveIntensity: <float>\n * emissiveMap: new THREE.Texture( <Image> ),\n *\n * bumpMap: new THREE.Texture( <Image> ),\n * bumpScale: <float>,\n *\n * normalMap: new THREE.Texture( <Image> ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: <Vector2>,\n *\n * displacementMap: new THREE.Texture( <Image> ),\n * displacementScale: <float>,\n * displacementBias: <float>,\n *\n * roughnessMap: new THREE.Texture( <Image> ),\n *\n * metalnessMap: new THREE.Texture( <Image> ),\n *\n * alphaMap: new THREE.Texture( <Image> ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * envMapIntensity: <float>\n *\n * refractionRatio: <float>,\n *\n * wireframe: <boolean>,\n * wireframeLinewidth: <float>,\n *\n * skinning: <bool>,\n * morphTargets: <bool>,\n * morphNormals: <bool>\n * }\n */\n\nfunction MeshStandardMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.defines = { 'STANDARD': '' };\n\n\tthis.type = 'MeshStandardMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\tthis.roughness = 0.5;\n\tthis.metalness = 0.5;\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.roughnessMap = null;\n\n\tthis.metalnessMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.envMapIntensity = 1.0;\n\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshStandardMaterial.prototype = Object.create( Material.prototype );\nMeshStandardMaterial.prototype.constructor = MeshStandardMaterial;\n\nMeshStandardMaterial.prototype.isMeshStandardMaterial = true;\n\nMeshStandardMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = { 'STANDARD': '' };\n\n\tthis.color.copy( source.color );\n\tthis.roughness = source.roughness;\n\tthis.metalness = source.metalness;\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.roughnessMap = source.roughnessMap;\n\n\tthis.metalnessMap = source.metalnessMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.envMapIntensity = source.envMapIntensity;\n\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n * reflectivity: <float>\n * }\n */\n\nfunction MeshPhysicalMaterial( parameters ) {\n\n\tMeshStandardMaterial.call( this );\n\n\tthis.defines = { 'PHYSICAL': '' };\n\n\tthis.type = 'MeshPhysicalMaterial';\n\n\tthis.reflectivity = 0.5; // maps to F0 = 0.04\n\n\tthis.clearCoat = 0.0;\n\tthis.clearCoatRoughness = 0.0;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshPhysicalMaterial.prototype = Object.create( MeshStandardMaterial.prototype );\nMeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial;\n\nMeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true;\n\nMeshPhysicalMaterial.prototype.copy = function ( source ) {\n\n\tMeshStandardMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = { 'PHYSICAL': '' };\n\n\tthis.reflectivity = source.reflectivity;\n\n\tthis.clearCoat = source.clearCoat;\n\tthis.clearCoatRoughness = source.clearCoatRoughness;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: <hex>,\n * specular: <hex>,\n * shininess: <float>,\n * opacity: <float>,\n *\n * map: new THREE.Texture( <Image> ),\n *\n * lightMap: new THREE.Texture( <Image> ),\n * lightMapIntensity: <float>\n *\n * aoMap: new THREE.Texture( <Image> ),\n * aoMapIntensity: <float>\n *\n * emissive: <hex>,\n * emissiveIntensity: <float>\n * emissiveMap: new THREE.Texture( <Image> ),\n *\n * bumpMap: new THREE.Texture( <Image> ),\n * bumpScale: <float>,\n *\n * normalMap: new THREE.Texture( <Image> ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: <Vector2>,\n *\n * displacementMap: new THREE.Texture( <Image> ),\n * displacementScale: <float>,\n * displacementBias: <float>,\n *\n * specularMap: new THREE.Texture( <Image> ),\n *\n * alphaMap: new THREE.Texture( <Image> ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: <float>,\n * refractionRatio: <float>,\n *\n * wireframe: <boolean>,\n * wireframeLinewidth: <float>,\n *\n * skinning: <bool>,\n * morphTargets: <bool>,\n * morphNormals: <bool>\n * }\n */\n\nfunction MeshPhongMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshPhongMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\tthis.specular = new Color( 0x111111 );\n\tthis.shininess = 30;\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshPhongMaterial.prototype = Object.create( Material.prototype );\nMeshPhongMaterial.prototype.constructor = MeshPhongMaterial;\n\nMeshPhongMaterial.prototype.isMeshPhongMaterial = true;\n\nMeshPhongMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\tthis.specular.copy( source.specular );\n\tthis.shininess = source.shininess;\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author takahirox / http://github.com/takahirox\n *\n * parameters = {\n * gradientMap: new THREE.Texture( <Image> )\n * }\n */\n\nfunction MeshToonMaterial( parameters ) {\n\n\tMeshPhongMaterial.call( this );\n\n\tthis.defines = { 'TOON': '' };\n\n\tthis.type = 'MeshToonMaterial';\n\n\tthis.gradientMap = null;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshToonMaterial.prototype = Object.create( MeshPhongMaterial.prototype );\nMeshToonMaterial.prototype.constructor = MeshToonMaterial;\n\nMeshToonMaterial.prototype.isMeshToonMaterial = true;\n\nMeshToonMaterial.prototype.copy = function ( source ) {\n\n\tMeshPhongMaterial.prototype.copy.call( this, source );\n\n\tthis.gradientMap = source.gradientMap;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n * opacity: <float>,\n *\n * bumpMap: new THREE.Texture( <Image> ),\n * bumpScale: <float>,\n *\n * normalMap: new THREE.Texture( <Image> ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: <Vector2>,\n *\n * displacementMap: new THREE.Texture( <Image> ),\n * displacementScale: <float>,\n * displacementBias: <float>,\n *\n * wireframe: <boolean>,\n * wireframeLinewidth: <float>\n *\n * skinning: <bool>,\n * morphTargets: <bool>,\n * morphNormals: <bool>\n * }\n */\n\nfunction MeshNormalMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshNormalMaterial';\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshNormalMaterial.prototype = Object.create( Material.prototype );\nMeshNormalMaterial.prototype.constructor = MeshNormalMaterial;\n\nMeshNormalMaterial.prototype.isMeshNormalMaterial = true;\n\nMeshNormalMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: <hex>,\n * opacity: <float>,\n *\n * map: new THREE.Texture( <Image> ),\n *\n * lightMap: new THREE.Texture( <Image> ),\n * lightMapIntensity: <float>\n *\n * aoMap: new THREE.Texture( <Image> ),\n * aoMapIntensity: <float>\n *\n * emissive: <hex>,\n * emissiveIntensity: <float>\n * emissiveMap: new THREE.Texture( <Image> ),\n *\n * specularMap: new THREE.Texture( <Image> ),\n *\n * alphaMap: new THREE.Texture( <Image> ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: <float>,\n * refractionRatio: <float>,\n *\n * wireframe: <boolean>,\n * wireframeLinewidth: <float>,\n *\n * skinning: <bool>,\n * morphTargets: <bool>,\n * morphNormals: <bool>\n * }\n */\n\nfunction MeshLambertMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshLambertMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshLambertMaterial.prototype = Object.create( Material.prototype );\nMeshLambertMaterial.prototype.constructor = MeshLambertMaterial;\n\nMeshLambertMaterial.prototype.isMeshLambertMaterial = true;\n\nMeshLambertMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: <hex>,\n * opacity: <float>,\n *\n * linewidth: <float>,\n *\n * scale: <float>,\n * dashSize: <float>,\n * gapSize: <float>\n * }\n */\n\nfunction LineDashedMaterial( parameters ) {\n\n\tLineBasicMaterial.call( this );\n\n\tthis.type = 'LineDashedMaterial';\n\n\tthis.scale = 1;\n\tthis.dashSize = 3;\n\tthis.gapSize = 1;\n\n\tthis.setValues( parameters );\n\n}\n\nLineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype );\nLineDashedMaterial.prototype.constructor = LineDashedMaterial;\n\nLineDashedMaterial.prototype.isLineDashedMaterial = true;\n\nLineDashedMaterial.prototype.copy = function ( source ) {\n\n\tLineBasicMaterial.prototype.copy.call( this, source );\n\n\tthis.scale = source.scale;\n\tthis.dashSize = source.dashSize;\n\tthis.gapSize = source.gapSize;\n\n\treturn this;\n\n};\n\n\n\nvar Materials = /*#__PURE__*/Object.freeze({\n\tShadowMaterial: ShadowMaterial,\n\tSpriteMaterial: SpriteMaterial,\n\tRawShaderMaterial: RawShaderMaterial,\n\tShaderMaterial: ShaderMaterial,\n\tPointsMaterial: PointsMaterial,\n\tMeshPhysicalMaterial: MeshPhysicalMaterial,\n\tMeshStandardMaterial: MeshStandardMaterial,\n\tMeshPhongMaterial: MeshPhongMaterial,\n\tMeshToonMaterial: MeshToonMaterial,\n\tMeshNormalMaterial: MeshNormalMaterial,\n\tMeshLambertMaterial: MeshLambertMaterial,\n\tMeshDepthMaterial: MeshDepthMaterial,\n\tMeshDistanceMaterial: MeshDistanceMaterial,\n\tMeshBasicMaterial: MeshBasicMaterial,\n\tLineDashedMaterial: LineDashedMaterial,\n\tLineBasicMaterial: LineBasicMaterial,\n\tMaterial: Material\n});\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LoadingManager( onLoad, onProgress, onError ) {\n\n\tvar scope = this;\n\n\tvar isLoading = false;\n\tvar itemsLoaded = 0;\n\tvar itemsTotal = 0;\n\tvar urlModifier = undefined;\n\n\tthis.onStart = undefined;\n\tthis.onLoad = onLoad;\n\tthis.onProgress = onProgress;\n\tthis.onError = onError;\n\n\tthis.itemStart = function ( url ) {\n\n\t\titemsTotal ++;\n\n\t\tif ( isLoading === false ) {\n\n\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tisLoading = true;\n\n\t};\n\n\tthis.itemEnd = function ( url ) {\n\n\t\titemsLoaded ++;\n\n\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t}\n\n\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\tisLoading = false;\n\n\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\tscope.onLoad();\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.itemError = function ( url ) {\n\n\t\tif ( scope.onError !== undefined ) {\n\n\t\t\tscope.onError( url );\n\n\t\t}\n\n\t};\n\n\tthis.resolveURL = function ( url ) {\n\n\t\tif ( urlModifier ) {\n\n\t\t\treturn urlModifier( url );\n\n\t\t}\n\n\t\treturn url;\n\n\t};\n\n\tthis.setURLModifier = function ( transform ) {\n\n\t\turlModifier = transform;\n\t\treturn this;\n\n\t};\n\n}\n\nvar DefaultLoadingManager = new LoadingManager();\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar loading = {};\n\nfunction FileLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( FileLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tvar scope = this;\n\n\t\tvar cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Check for data: URI\n\t\tvar dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\t\tvar dataUriRegexResult = url.match( dataUriRegex );\n\n\t\t// Safari can not handle Data URIs through XMLHttpRequest so process manually\n\t\tif ( dataUriRegexResult ) {\n\n\t\t\tvar mimeType = dataUriRegexResult[ 1 ];\n\t\t\tvar isBase64 = !! dataUriRegexResult[ 2 ];\n\t\t\tvar data = dataUriRegexResult[ 3 ];\n\n\t\t\tdata = window.decodeURIComponent( data );\n\n\t\t\tif ( isBase64 ) data = window.atob( data );\n\n\t\t\ttry {\n\n\t\t\t\tvar response;\n\t\t\t\tvar responseType = ( this.responseType || '' ).toLowerCase();\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\tvar view = new Uint8Array( data.length );\n\n\t\t\t\t\t\tfor ( var i = 0; i < data.length; i ++ ) {\n\n\t\t\t\t\t\t\tview[ i ] = data.charCodeAt( i );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( responseType === 'blob' ) {\n\n\t\t\t\t\t\t\tresponse = new Blob( [ view.buffer ], { type: mimeType } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tresponse = view.buffer;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\tvar parser = new DOMParser();\n\t\t\t\t\t\tresponse = parser.parseFromString( data, mimeType );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\tresponse = JSON.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault: // 'text' or other\n\n\t\t\t\t\t\tresponse = data;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\twindow.setTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( response );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\twindow.setTimeout( function () {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Initialise array for duplicate requests\n\n\t\t\tloading[ url ] = [];\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\tvar request = new XMLHttpRequest();\n\n\t\t\trequest.open( 'GET', url, true );\n\n\t\t\trequest.addEventListener( 'load', function ( event ) {\n\n\t\t\t\tvar response = this.response;\n\n\t\t\t\tCache.add( url, response );\n\n\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tif ( this.status === 200 || this.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tif ( this.status === 0 ) console.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( response );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'progress', function ( event ) {\n\n\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'error', function ( event ) {\n\n\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}, false );\n\n\t\t\tif ( this.responseType !== undefined ) request.responseType = this.responseType;\n\t\t\tif ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;\n\n\t\t\tif ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' );\n\n\t\t\tfor ( var header in this.requestHeader ) {\n\n\t\t\t\trequest.setRequestHeader( header, this.requestHeader[ header ] );\n\n\t\t\t}\n\n\t\t\trequest.send( null );\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\treturn request;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t},\n\n\tsetResponseType: function ( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t},\n\n\tsetWithCredentials: function ( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t},\n\n\tsetMimeType: function ( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t},\n\n\tsetRequestHeader: function ( value ) {\n\n\t\tthis.requestHeader = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n *\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n */\n\nfunction CompressedTextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t// override in sub classes\n\tthis._parser = null;\n\n}\n\nObject.assign( CompressedTextureLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar images = [];\n\n\t\tvar texture = new CompressedTexture();\n\t\ttexture.image = images;\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tvar texDatas = scope._parser( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 )\n\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tvar loaded = 0;\n\n\t\t\tfor ( var i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tvar texDatas = scope._parser( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tvar faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( var f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( var i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author Nikos M. / https://github.com/foo123/\n *\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n */\n\nfunction DataTextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t// override in sub classes\n\tthis._parser = null;\n\n}\n\nObject.assign( DataTextureLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texture = new DataTexture();\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tvar texData = scope._parser( buffer );\n\n\t\t\tif ( ! texData ) return;\n\n\t\t\tif ( undefined !== texData.image ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( undefined !== texData.data ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = undefined !== texData.wrapS ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = undefined !== texData.wrapT ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = undefined !== texData.magFilter ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = undefined !== texData.minFilter ? texData.minFilter : LinearMipMapLinearFilter;\n\n\t\t\ttexture.anisotropy = undefined !== texData.anisotropy ? texData.anisotropy : 1;\n\n\t\t\tif ( undefined !== texData.format ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\t\t\tif ( undefined !== texData.type ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( undefined !== texData.mipmaps ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\n\t\t\t}\n\n\t\t\tif ( 1 === texData.mipmapCount ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\n\nfunction ImageLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( ImageLoader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tvar scope = this;\n\n\t\tvar cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tvar image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemEnd( url );\n\t\t\tscope.manager.itemError( url );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\tif ( url.substr( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\n\nfunction CubeTextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( CubeTextureLoader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tload: function ( urls, onLoad, onProgress, onError ) {\n\n\t\tvar texture = new CubeTexture();\n\n\t\tvar loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tvar loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( var i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\n\nfunction TextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( TextureLoader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar texture = new Texture();\n\n\t\tvar loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\n\t\t\t// JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB.\n\t\t\tvar isJPEG = url.search( /\\.(jpg|jpeg)$/ ) > 0 || url.search( /^data\\:image\\/jpeg/ ) === 0;\n\n\t\t\ttexture.format = isJPEG ? RGBFormat : RGBAFormat;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * Extensible curve object\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u )\n * .getPoints(), .getSpacedPoints()\n * .getLength()\n * .updateArcLengths()\n *\n * This following curves inherit from THREE.Curve:\n *\n * -- 2D curves --\n * THREE.ArcCurve\n * THREE.CubicBezierCurve\n * THREE.EllipseCurve\n * THREE.LineCurve\n * THREE.QuadraticBezierCurve\n * THREE.SplineCurve\n *\n * -- 3D curves --\n * THREE.CatmullRomCurve3\n * THREE.CubicBezierCurve3\n * THREE.LineCurve3\n * THREE.QuadraticBezierCurve3\n *\n * A series of curves can be represented as a THREE.CurvePath.\n *\n **/\n\n/**************************************************************\n *\tAbstract Curve base class\n **************************************************************/\n\nfunction Curve() {\n\n\tthis.type = 'Curve';\n\n\tthis.arcLengthDivisions = 200;\n\n}\n\nObject.assign( Curve.prototype, {\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint: function ( /* t, optionalTarget */ ) {\n\n\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\treturn null;\n\n\t},\n\n\t// Get point at relative position in curve according to arc length\n\t// - u [0 .. 1]\n\n\tgetPointAt: function ( u, optionalTarget ) {\n\n\t\tvar t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t},\n\n\t// Get sequence of points using getPoint( t )\n\n\tgetPoints: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = 5;\n\n\t\tvar points = [];\n\n\t\tfor ( var d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\t// Get sequence of points using getPointAt( u )\n\n\tgetSpacedPoints: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = 5;\n\n\t\tvar points = [];\n\n\t\tfor ( var d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\t// Get total curve arc length\n\n\tgetLength: function () {\n\n\t\tvar lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t},\n\n\t// Get list of cumulative segment lengths\n\n\tgetLengths: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = this.arcLengthDivisions;\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tvar cache = [];\n\t\tvar current, last = this.getPoint( 0 );\n\t\tvar p, sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t},\n\n\tupdateArcLengths: function () {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t},\n\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\tgetUtoTmapping: function ( u, distance ) {\n\n\t\tvar arcLengths = this.getLengths();\n\n\t\tvar i = 0, il = arcLengths.length;\n\n\t\tvar targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tvar low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\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\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tvar lengthBefore = arcLengths[ i ];\n\t\tvar lengthAfter = arcLengths[ i + 1 ];\n\n\t\tvar segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tvar segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tvar t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t},\n\n\t// Returns a unit vector tangent at t\n\t// In case any sub curve does not implement its tangent derivation,\n\t// 2 points a small delta apart will be used to find its gradient\n\t// which seems to give a reasonable approximation\n\n\tgetTangent: function ( t ) {\n\n\t\tvar delta = 0.0001;\n\t\tvar t1 = t - delta;\n\t\tvar t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tvar pt1 = this.getPoint( t1 );\n\t\tvar pt2 = this.getPoint( t2 );\n\n\t\tvar vec = pt2.clone().sub( pt1 );\n\t\treturn vec.normalize();\n\n\t},\n\n\tgetTangentAt: function ( u ) {\n\n\t\tvar t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t );\n\n\t},\n\n\tcomputeFrenetFrames: function ( segments, closed ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tvar normal = new Vector3();\n\n\t\tvar tangents = [];\n\t\tvar normals = [];\n\t\tvar binormals = [];\n\n\t\tvar vec = new Vector3();\n\t\tvar mat = new Matrix4();\n\n\t\tvar i, u, theta;\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( i = 0; i <= segments; i ++ ) {\n\n\t\t\tu = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u );\n\t\t\ttangents[ i ].normalize();\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new Vector3();\n\t\tbinormals[ 0 ] = new Vector3();\n\t\tvar min = Number.MAX_VALUE;\n\t\tvar tx = Math.abs( tangents[ 0 ].x );\n\t\tvar ty = Math.abs( tangents[ 0 ].y );\n\t\tvar tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\ttheta = Math.acos( _Math.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\ttheta = Math.acos( _Math.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'EllipseCurve';\n\n\tthis.aX = aX || 0;\n\tthis.aY = aY || 0;\n\n\tthis.xRadius = xRadius || 1;\n\tthis.yRadius = yRadius || 1;\n\n\tthis.aStartAngle = aStartAngle || 0;\n\tthis.aEndAngle = aEndAngle || 2 * Math.PI;\n\n\tthis.aClockwise = aClockwise || false;\n\n\tthis.aRotation = aRotation || 0;\n\n}\n\nEllipseCurve.prototype = Object.create( Curve.prototype );\nEllipseCurve.prototype.constructor = EllipseCurve;\n\nEllipseCurve.prototype.isEllipseCurve = true;\n\nEllipseCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar twoPi = Math.PI * 2;\n\tvar deltaAngle = this.aEndAngle - this.aStartAngle;\n\tvar samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t// ensures that deltaAngle is 0 .. 2 PI\n\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\tif ( samePoints ) {\n\n\t\t\tdeltaAngle = 0;\n\n\t\t} else {\n\n\t\t\tdeltaAngle = twoPi;\n\n\t\t}\n\n\t}\n\n\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\tdeltaAngle = - twoPi;\n\n\t\t} else {\n\n\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t}\n\n\t}\n\n\tvar angle = this.aStartAngle + t * deltaAngle;\n\tvar x = this.aX + this.xRadius * Math.cos( angle );\n\tvar y = this.aY + this.yRadius * Math.sin( angle );\n\n\tif ( this.aRotation !== 0 ) {\n\n\t\tvar cos = Math.cos( this.aRotation );\n\t\tvar sin = Math.sin( this.aRotation );\n\n\t\tvar tx = x - this.aX;\n\t\tvar ty = y - this.aY;\n\n\t\t// Rotate the point about the center of the ellipse.\n\t\tx = tx * cos - ty * sin + this.aX;\n\t\ty = tx * sin + ty * cos + this.aY;\n\n\t}\n\n\treturn point.set( x, y );\n\n};\n\nEllipseCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.aX = source.aX;\n\tthis.aY = source.aY;\n\n\tthis.xRadius = source.xRadius;\n\tthis.yRadius = source.yRadius;\n\n\tthis.aStartAngle = source.aStartAngle;\n\tthis.aEndAngle = source.aEndAngle;\n\n\tthis.aClockwise = source.aClockwise;\n\n\tthis.aRotation = source.aRotation;\n\n\treturn this;\n\n};\n\n\nEllipseCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.aX = this.aX;\n\tdata.aY = this.aY;\n\n\tdata.xRadius = this.xRadius;\n\tdata.yRadius = this.yRadius;\n\n\tdata.aStartAngle = this.aStartAngle;\n\tdata.aEndAngle = this.aEndAngle;\n\n\tdata.aClockwise = this.aClockwise;\n\n\tdata.aRotation = this.aRotation;\n\n\treturn data;\n\n};\n\nEllipseCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.aX = json.aX;\n\tthis.aY = json.aY;\n\n\tthis.xRadius = json.xRadius;\n\tthis.yRadius = json.yRadius;\n\n\tthis.aStartAngle = json.aStartAngle;\n\tthis.aEndAngle = json.aEndAngle;\n\n\tthis.aClockwise = json.aClockwise;\n\n\tthis.aRotation = json.aRotation;\n\n\treturn this;\n\n};\n\nfunction ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\tEllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\tthis.type = 'ArcCurve';\n\n}\n\nArcCurve.prototype = Object.create( EllipseCurve.prototype );\nArcCurve.prototype.constructor = ArcCurve;\n\nArcCurve.prototype.isArcCurve = true;\n\n/**\n * @author zz85 https://github.com/zz85\n *\n * Centripetal CatmullRom Curve - which is useful for avoiding\n * cusps and self-intersections in non-uniform catmull rom curves.\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n *\n * curve.type accepts centripetal(default), chordal and catmullrom\n * curve.tension is used for catmullrom which defaults to 0.5\n */\n\n\n/*\nBased on an optimized c++ solution in\n - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n - http://ideone.com/NoEbVM\n\nThis CubicPoly class could be used for reusing some variables and calculations,\nbut for three.js curve use, it could be possible inlined and flatten into a single function call\nwhich can be placed in CurveUtils.\n*/\n\nfunction CubicPoly() {\n\n\tvar c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t * p(0) = x0, p(1) = x1\n\t * and\n\t * p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tvar t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tvar t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tvar t2 = t * t;\n\t\t\tvar t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nvar tmp = new Vector3();\nvar px = new CubicPoly(), py = new CubicPoly(), pz = new CubicPoly();\n\nfunction CatmullRomCurve3( points, closed, curveType, tension ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CatmullRomCurve3';\n\n\tthis.points = points || [];\n\tthis.closed = closed || false;\n\tthis.curveType = curveType || 'centripetal';\n\tthis.tension = tension || 0.5;\n\n}\n\nCatmullRomCurve3.prototype = Object.create( Curve.prototype );\nCatmullRomCurve3.prototype.constructor = CatmullRomCurve3;\n\nCatmullRomCurve3.prototype.isCatmullRomCurve3 = true;\n\nCatmullRomCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tvar points = this.points;\n\tvar l = points.length;\n\n\tvar p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\tvar intPoint = Math.floor( p );\n\tvar weight = p - intPoint;\n\n\tif ( this.closed ) {\n\n\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\tintPoint = l - 2;\n\t\tweight = 1;\n\n\t}\n\n\tvar p0, p1, p2, p3; // 4 points\n\n\tif ( this.closed || intPoint > 0 ) {\n\n\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t} else {\n\n\t\t// extrapolate first point\n\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\tp0 = tmp;\n\n\t}\n\n\tp1 = points[ intPoint % l ];\n\tp2 = points[ ( intPoint + 1 ) % l ];\n\n\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t} else {\n\n\t\t// extrapolate last point\n\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\tp3 = tmp;\n\n\t}\n\n\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t// init Centripetal / Chordal Catmull-Rom\n\t\tvar pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\tvar dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\tvar dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\tvar dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t// safety check for repeated points\n\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t}\n\n\tpoint.set(\n\t\tpx.calc( weight ),\n\t\tpy.calc( weight ),\n\t\tpz.calc( weight )\n\t);\n\n\treturn point;\n\n};\n\nCatmullRomCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\tvar point = source.points[ i ];\n\n\t\tthis.points.push( point.clone() );\n\n\t}\n\n\tthis.closed = source.closed;\n\tthis.curveType = source.curveType;\n\tthis.tension = source.tension;\n\n\treturn this;\n\n};\n\nCatmullRomCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.points = [];\n\n\tfor ( var i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\tvar point = this.points[ i ];\n\t\tdata.points.push( point.toArray() );\n\n\t}\n\n\tdata.closed = this.closed;\n\tdata.curveType = this.curveType;\n\tdata.tension = this.tension;\n\n\treturn data;\n\n};\n\nCatmullRomCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\tvar point = json.points[ i ];\n\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t}\n\n\tthis.closed = json.closed;\n\tthis.curveType = json.curveType;\n\tthis.tension = json.tension;\n\n\treturn this;\n\n};\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n *\n * Bezier Curves formulas obtained from\n * http://en.wikipedia.org/wiki/Bézier_curve\n */\n\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tvar v0 = ( p2 - p0 ) * 0.5;\n\tvar v1 = ( p3 - p1 ) * 0.5;\n\tvar t2 = t * t;\n\tvar t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tvar k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tvar k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tvar k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\nfunction CubicBezierCurve( v0, v1, v2, v3 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CubicBezierCurve';\n\n\tthis.v0 = v0 || new Vector2();\n\tthis.v1 = v1 || new Vector2();\n\tthis.v2 = v2 || new Vector2();\n\tthis.v3 = v3 || new Vector2();\n\n}\n\nCubicBezierCurve.prototype = Object.create( Curve.prototype );\nCubicBezierCurve.prototype.constructor = CubicBezierCurve;\n\nCubicBezierCurve.prototype.isCubicBezierCurve = true;\n\nCubicBezierCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\tpoint.set(\n\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t);\n\n\treturn point;\n\n};\n\nCubicBezierCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\tthis.v3.copy( source.v3 );\n\n\treturn this;\n\n};\n\nCubicBezierCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\tdata.v3 = this.v3.toArray();\n\n\treturn data;\n\n};\n\nCubicBezierCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\tthis.v3.fromArray( json.v3 );\n\n\treturn this;\n\n};\n\nfunction CubicBezierCurve3( v0, v1, v2, v3 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CubicBezierCurve3';\n\n\tthis.v0 = v0 || new Vector3();\n\tthis.v1 = v1 || new Vector3();\n\tthis.v2 = v2 || new Vector3();\n\tthis.v3 = v3 || new Vector3();\n\n}\n\nCubicBezierCurve3.prototype = Object.create( Curve.prototype );\nCubicBezierCurve3.prototype.constructor = CubicBezierCurve3;\n\nCubicBezierCurve3.prototype.isCubicBezierCurve3 = true;\n\nCubicBezierCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\tpoint.set(\n\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t);\n\n\treturn point;\n\n};\n\nCubicBezierCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\tthis.v3.copy( source.v3 );\n\n\treturn this;\n\n};\n\nCubicBezierCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\tdata.v3 = this.v3.toArray();\n\n\treturn data;\n\n};\n\nCubicBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\tthis.v3.fromArray( json.v3 );\n\n\treturn this;\n\n};\n\nfunction LineCurve( v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'LineCurve';\n\n\tthis.v1 = v1 || new Vector2();\n\tthis.v2 = v2 || new Vector2();\n\n}\n\nLineCurve.prototype = Object.create( Curve.prototype );\nLineCurve.prototype.constructor = LineCurve;\n\nLineCurve.prototype.isLineCurve = true;\n\nLineCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tif ( t === 1 ) {\n\n\t\tpoint.copy( this.v2 );\n\n\t} else {\n\n\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t}\n\n\treturn point;\n\n};\n\n// Line curve is linear, so we can overwrite default getPointAt\n\nLineCurve.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\treturn this.getPoint( u, optionalTarget );\n\n};\n\nLineCurve.prototype.getTangent = function ( /* t */ ) {\n\n\tvar tangent = this.v2.clone().sub( this.v1 );\n\n\treturn tangent.normalize();\n\n};\n\nLineCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nLineCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nLineCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction LineCurve3( v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'LineCurve3';\n\n\tthis.v1 = v1 || new Vector3();\n\tthis.v2 = v2 || new Vector3();\n\n}\n\nLineCurve3.prototype = Object.create( Curve.prototype );\nLineCurve3.prototype.constructor = LineCurve3;\n\nLineCurve3.prototype.isLineCurve3 = true;\n\nLineCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tif ( t === 1 ) {\n\n\t\tpoint.copy( this.v2 );\n\n\t} else {\n\n\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t}\n\n\treturn point;\n\n};\n\n// Line curve is linear, so we can overwrite default getPointAt\n\nLineCurve3.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\treturn this.getPoint( u, optionalTarget );\n\n};\n\nLineCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nLineCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nLineCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction QuadraticBezierCurve( v0, v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'QuadraticBezierCurve';\n\n\tthis.v0 = v0 || new Vector2();\n\tthis.v1 = v1 || new Vector2();\n\tthis.v2 = v2 || new Vector2();\n\n}\n\nQuadraticBezierCurve.prototype = Object.create( Curve.prototype );\nQuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve;\n\nQuadraticBezierCurve.prototype.isQuadraticBezierCurve = true;\n\nQuadraticBezierCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\tpoint.set(\n\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t);\n\n\treturn point;\n\n};\n\nQuadraticBezierCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nQuadraticBezierCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nQuadraticBezierCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction QuadraticBezierCurve3( v0, v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'QuadraticBezierCurve3';\n\n\tthis.v0 = v0 || new Vector3();\n\tthis.v1 = v1 || new Vector3();\n\tthis.v2 = v2 || new Vector3();\n\n}\n\nQuadraticBezierCurve3.prototype = Object.create( Curve.prototype );\nQuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3;\n\nQuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true;\n\nQuadraticBezierCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\tpoint.set(\n\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t);\n\n\treturn point;\n\n};\n\nQuadraticBezierCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nQuadraticBezierCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nQuadraticBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction SplineCurve( points /* array of Vector2 */ ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'SplineCurve';\n\n\tthis.points = points || [];\n\n}\n\nSplineCurve.prototype = Object.create( Curve.prototype );\nSplineCurve.prototype.constructor = SplineCurve;\n\nSplineCurve.prototype.isSplineCurve = true;\n\nSplineCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar points = this.points;\n\tvar p = ( points.length - 1 ) * t;\n\n\tvar intPoint = Math.floor( p );\n\tvar weight = p - intPoint;\n\n\tvar p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\tvar p1 = points[ intPoint ];\n\tvar p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\tvar p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\tpoint.set(\n\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t);\n\n\treturn point;\n\n};\n\nSplineCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\tvar point = source.points[ i ];\n\n\t\tthis.points.push( point.clone() );\n\n\t}\n\n\treturn this;\n\n};\n\nSplineCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.points = [];\n\n\tfor ( var i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\tvar point = this.points[ i ];\n\t\tdata.points.push( point.toArray() );\n\n\t}\n\n\treturn data;\n\n};\n\nSplineCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\tvar point = json.points[ i ];\n\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t}\n\n\treturn this;\n\n};\n\n\n\nvar Curves = /*#__PURE__*/Object.freeze({\n\tArcCurve: ArcCurve,\n\tCatmullRomCurve3: CatmullRomCurve3,\n\tCubicBezierCurve: CubicBezierCurve,\n\tCubicBezierCurve3: CubicBezierCurve3,\n\tEllipseCurve: EllipseCurve,\n\tLineCurve: LineCurve,\n\tLineCurve3: LineCurve3,\n\tQuadraticBezierCurve: QuadraticBezierCurve,\n\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\tSplineCurve: SplineCurve\n});\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n *\n **/\n\n/**************************************************************\n *\tCurved Path - a curve path is simply a array of connected\n * curves, but retains the api of a curve\n **************************************************************/\n\nfunction CurvePath() {\n\n\tCurve.call( this );\n\n\tthis.type = 'CurvePath';\n\n\tthis.curves = [];\n\tthis.autoClose = false; // Automatically closes the path\n\n}\n\nCurvePath.prototype = Object.assign( Object.create( Curve.prototype ), {\n\n\tconstructor: CurvePath,\n\n\tadd: function ( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t},\n\n\tclosePath: function () {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tvar startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tvar endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tthis.curves.push( new LineCurve( endPoint, startPoint ) );\n\n\t\t}\n\n\t},\n\n\t// To get accurate point with reference to\n\t// entire path distance at time t,\n\t// following has to be done:\n\n\t// 1. Length of each sub path have to be known\n\t// 2. Locate and identify type of curve\n\t// 3. Get t for the curve\n\t// 4. Return curve.getPointAt(t')\n\n\tgetPoint: function ( t ) {\n\n\t\tvar d = t * this.getLength();\n\t\tvar curveLengths = this.getCurveLengths();\n\t\tvar i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tvar diff = curveLengths[ i ] - d;\n\t\t\t\tvar curve = this.curves[ i ];\n\n\t\t\t\tvar segmentLength = curve.getLength();\n\t\t\t\tvar u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 <d\n\n\t},\n\n\t// We cannot use the default THREE.Curve getPoint() with getLength() because in\n\t// THREE.Curve, getLength() depends on getPoint() but in THREE.CurvePath\n\t// getPoint() depends on getLength\n\n\tgetLength: function () {\n\n\t\tvar lens = this.getCurveLengths();\n\t\treturn lens[ lens.length - 1 ];\n\n\t},\n\n\t// cacheLengths must be recalculated.\n\tupdateArcLengths: function () {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.cacheLengths = null;\n\t\tthis.getCurveLengths();\n\n\t},\n\n\t// Compute lengths and cache them\n\t// We cannot overwrite getLengths() because UtoT mapping uses it.\n\n\tgetCurveLengths: function () {\n\n\t\t// We use cache values if curves and cache array are same length\n\n\t\tif ( this.cacheLengths && this.cacheLengths.length === this.curves.length ) {\n\n\t\t\treturn this.cacheLengths;\n\n\t\t}\n\n\t\t// Get length of sub-curve\n\t\t// Push sums into cached array\n\n\t\tvar lengths = [], sums = 0;\n\n\t\tfor ( var i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tsums += this.curves[ i ].getLength();\n\t\t\tlengths.push( sums );\n\n\t\t}\n\n\t\tthis.cacheLengths = lengths;\n\n\t\treturn lengths;\n\n\t},\n\n\tgetSpacedPoints: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = 40;\n\n\t\tvar points = [];\n\n\t\tfor ( var i = 0; i <= divisions; i ++ ) {\n\n\t\t\tpoints.push( this.getPoint( i / divisions ) );\n\n\t\t}\n\n\t\tif ( this.autoClose ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\tgetPoints: function ( divisions ) {\n\n\t\tdivisions = divisions || 12;\n\n\t\tvar points = [], last;\n\n\t\tfor ( var i = 0, curves = this.curves; i < curves.length; i ++ ) {\n\n\t\t\tvar curve = curves[ i ];\n\t\t\tvar resolution = ( curve && curve.isEllipseCurve ) ? divisions * 2\n\t\t\t\t: ( curve && ( curve.isLineCurve || curve.isLineCurve3 ) ) ? 1\n\t\t\t\t\t: ( curve && curve.isSplineCurve ) ? divisions * curve.points.length\n\t\t\t\t\t\t: divisions;\n\n\t\t\tvar pts = curve.getPoints( resolution );\n\n\t\t\tfor ( var j = 0; j < pts.length; j ++ ) {\n\n\t\t\t\tvar point = pts[ j ];\n\n\t\t\t\tif ( last && last.equals( point ) ) continue; // ensures no consecutive points are duplicates\n\n\t\t\t\tpoints.push( point );\n\t\t\t\tlast = point;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.autoClose && points.length > 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( var i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tvar curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( var i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tvar curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( var i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tvar curve = json.curves[ i ];\n\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * Creates free form 2d path using series of points, lines or curves.\n **/\n\nfunction Path( points ) {\n\n\tCurvePath.call( this );\n\n\tthis.type = 'Path';\n\n\tthis.currentPoint = new Vector2();\n\n\tif ( points ) {\n\n\t\tthis.setFromPoints( points );\n\n\t}\n\n}\n\nPath.prototype = Object.assign( Object.create( CurvePath.prototype ), {\n\n\tconstructor: Path,\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( var i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t},\n\n\tmoveTo: function ( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t},\n\n\tlineTo: function ( x, y ) {\n\n\t\tvar curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t},\n\n\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\tvar curve = new QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t},\n\n\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tvar curve = new CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t},\n\n\tsplineThru: function ( pts /*Array of Vector*/ ) {\n\n\t\tvar npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tvar curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t},\n\n\tarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tvar x0 = this.currentPoint.x;\n\t\tvar y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t},\n\n\tabsarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t},\n\n\tellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tvar x0 = this.currentPoint.x;\n\t\tvar y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t},\n\n\tabsellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tvar curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tvar firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tvar lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tCurvePath.prototype.copy.call( this, source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = CurvePath.prototype.toJSON.call( this );\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tCurvePath.prototype.fromJSON.call( this, json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * Defines a 2d shape plane using paths.\n **/\n\n// STEP 1 Create a path.\n// STEP 2 Turn path into shape.\n// STEP 3 ExtrudeGeometry takes in Shape/Shapes\n// STEP 3a - Extract points from each shape, turn to vertices\n// STEP 3b - Triangulate each shape, add faces.\n\nfunction Shape( points ) {\n\n\tPath.call( this, points );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.type = 'Shape';\n\n\tthis.holes = [];\n\n}\n\nShape.prototype = Object.assign( Object.create( Path.prototype ), {\n\n\tconstructor: Shape,\n\n\tgetPointsHoles: function ( divisions ) {\n\n\t\tvar holesPts = [];\n\n\t\tfor ( var i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t},\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\textractPoints: function ( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tPath.prototype.copy.call( this, source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( var i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tvar hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = Path.prototype.toJSON.call( this );\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( var i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tvar hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tPath.prototype.fromJSON.call( this, json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( var i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tvar hole = json.holes[ i ];\n\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Light( color, intensity ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Light';\n\n\tthis.color = new Color( color );\n\tthis.intensity = intensity !== undefined ? intensity : 1;\n\n\tthis.receiveShadow = undefined;\n\n}\n\nLight.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Light,\n\n\tisLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction HemisphereLight( skyColor, groundColor, intensity ) {\n\n\tLight.call( this, skyColor, intensity );\n\n\tthis.type = 'HemisphereLight';\n\n\tthis.castShadow = undefined;\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.groundColor = new Color( groundColor );\n\n}\n\nHemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: HemisphereLight,\n\n\tisHemisphereLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LightShadow( camera ) {\n\n\tthis.camera = camera;\n\n\tthis.bias = 0;\n\tthis.radius = 1;\n\n\tthis.mapSize = new Vector2( 512, 512 );\n\n\tthis.map = null;\n\tthis.matrix = new Matrix4();\n\n}\n\nObject.assign( LightShadow.prototype, {\n\n\tcopy: function ( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar object = {};\n\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction SpotLightShadow() {\n\n\tLightShadow.call( this, new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n}\n\nSpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: SpotLightShadow,\n\n\tisSpotLightShadow: true,\n\n\tupdate: function ( light ) {\n\n\t\tvar camera = this.camera;\n\n\t\tvar fov = _Math.RAD2DEG * 2 * light.angle;\n\t\tvar aspect = this.mapSize.width / this.mapSize.height;\n\t\tvar far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction SpotLight( color, intensity, distance, angle, penumbra, decay ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'SpotLight';\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.target = new Object3D();\n\n\tObject.defineProperty( this, 'power', {\n\t\tget: function () {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\treturn this.intensity * Math.PI;\n\n\t\t},\n\t\tset: function ( power ) {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\tthis.intensity = power / Math.PI;\n\n\t\t}\n\t} );\n\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\tthis.angle = ( angle !== undefined ) ? angle : Math.PI / 3;\n\tthis.penumbra = ( penumbra !== undefined ) ? penumbra : 0;\n\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\tthis.shadow = new SpotLightShadow();\n\n}\n\nSpotLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: SpotLight,\n\n\tisSpotLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\n\nfunction PointLight( color, intensity, distance, decay ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'PointLight';\n\n\tObject.defineProperty( this, 'power', {\n\t\tget: function () {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\treturn this.intensity * 4 * Math.PI;\n\n\t\t},\n\t\tset: function ( power ) {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t\t}\n\t} );\n\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\tthis.shadow = new LightShadow( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n}\n\nPointLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: PointLight,\n\n\tisPointLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction DirectionalLightShadow( ) {\n\n\tLightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n}\n\nDirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: DirectionalLightShadow\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction DirectionalLight( color, intensity ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'DirectionalLight';\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.target = new Object3D();\n\n\tthis.shadow = new DirectionalLightShadow();\n\n}\n\nDirectionalLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: DirectionalLight,\n\n\tisDirectionalLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AmbientLight( color, intensity ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'AmbientLight';\n\n\tthis.castShadow = undefined;\n\n}\n\nAmbientLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: AmbientLight,\n\n\tisAmbientLight: true\n\n} );\n\n/**\n * @author abelnation / http://github.com/abelnation\n */\n\nfunction RectAreaLight( color, intensity, width, height ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'RectAreaLight';\n\n\tthis.width = ( width !== undefined ) ? width : 10;\n\tthis.height = ( height !== undefined ) ? height : 10;\n\n}\n\nRectAreaLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: RectAreaLight,\n\n\tisRectAreaLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Light.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n *\n * A Track that interpolates Strings\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction StringKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nStringKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: StringKeyframeTrack,\n\n\tValueTypeName: 'string',\n\tValueBufferType: Array,\n\n\tDefaultInterpolation: InterpolateDiscrete,\n\n\tInterpolantFactoryMethodLinear: undefined,\n\n\tInterpolantFactoryMethodSmooth: undefined\n\n} );\n\n/**\n *\n * A Track of Boolean keyframe values.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction BooleanKeyframeTrack( name, times, values ) {\n\n\tKeyframeTrack.call( this, name, times, values );\n\n}\n\nBooleanKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: BooleanKeyframeTrack,\n\n\tValueTypeName: 'bool',\n\tValueBufferType: Array,\n\n\tDefaultInterpolation: InterpolateDiscrete,\n\n\tInterpolantFactoryMethodLinear: undefined,\n\tInterpolantFactoryMethodSmooth: undefined\n\n\t// Note: Actually this track could have a optimized / compressed\n\t// representation of a single value and a custom interpolant that\n\t// computes \"firstValue ^ isOdd( index )\".\n\n} );\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n * @author tschw\n */\n\nfunction Interpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tthis.parameterPositions = parameterPositions;\n\tthis._cachedIndex = 0;\n\n\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\tthis.sampleValues = sampleValues;\n\tthis.valueSize = sampleSize;\n\n}\n\nObject.assign( Interpolant.prototype, {\n\n\tevaluate: function ( t ) {\n\n\t\tvar pp = this.parameterPositions,\n\t\t\ti1 = this._cachedIndex,\n\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tvar right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( var giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.afterEnd_( i1 - 1, t, t0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tvar t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( var giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tvar mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.afterEnd_( i1 - 1, t0, t );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t},\n\n\tsettings: null, // optional, subclass-specific settings structure\n\t// Note: The indirection allows central control of many interpolants.\n\n\t// --- Protected interface\n\n\tDefaultSettings_: {},\n\n\tgetSettings_: function () {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t},\n\n\tcopySampleValue_: function ( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// Template methods for derived classes:\n\n\tinterpolate_: function ( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t},\n\n\tintervalChanged_: function ( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n} );\n\n//!\\ DECLARE ALIAS AFTER assign prototype !\nObject.assign( Interpolant.prototype, {\n\n\t//( 0, t, t0 ), returns this.resultBuffer\n\tbeforeStart_: Interpolant.prototype.copySampleValue_,\n\n\t//( N-1, tN-1, t ), returns this.resultBuffer\n\tafterEnd_: Interpolant.prototype.copySampleValue_,\n\n} );\n\n/**\n * Spherical linear unit quaternion interpolant.\n *\n * @author tschw\n */\n\nfunction QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nQuaternionLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: QuaternionLinearInterpolant,\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset = i1 * stride,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tfor ( var end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n *\n * A Track of quaternion keyframe values.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction QuaternionKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nQuaternionKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: QuaternionKeyframeTrack,\n\n\tValueTypeName: 'quaternion',\n\n\t// ValueBufferType is inherited\n\n\tDefaultInterpolation: InterpolateLinear,\n\n\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodSmooth: undefined // not yet implemented\n\n} );\n\n/**\n *\n * A Track of keyframe values that represent color.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction ColorKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nColorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: ColorKeyframeTrack,\n\n\tValueTypeName: 'color'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n\t// Note: Very basic implementation and nothing special yet.\n\t// However, this is the place for color space parameterization.\n\n} );\n\n/**\n *\n * A Track of numeric keyframe values.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction NumberKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nNumberKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: NumberKeyframeTrack,\n\n\tValueTypeName: 'number'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n} );\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n *\n * @author tschw\n */\n\nfunction CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\tthis._weightPrev = - 0;\n\tthis._offsetPrev = - 0;\n\tthis._weightNext = - 0;\n\tthis._offsetNext = - 0;\n\n}\n\nCubicInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: CubicInterpolant,\n\n\tDefaultSettings_: {\n\n\t\tendingStart: ZeroCurvatureEnding,\n\t\tendingEnd: ZeroCurvatureEnding\n\n\t},\n\n\tintervalChanged_: function ( i1, t0, t1 ) {\n\n\t\tvar pp = this.parameterPositions,\n\t\t\tiPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t},\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tvar sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tvar s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tvar s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tvar sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n * @author tschw\n */\n\nfunction LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: LinearInterpolant,\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceeding\n * the parameter.\n *\n * @author tschw\n */\n\nfunction DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nDiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: DiscreteInterpolant,\n\n\tinterpolate_: function ( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n} );\n\n/**\n * @author tschw\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n */\n\nvar AnimationUtils = {\n\n\t// same as Array.prototype.slice, but also works on typed arrays\n\tarraySlice: function ( array, from, to ) {\n\n\t\tif ( AnimationUtils.isTypedArray( array ) ) {\n\n\t\t\t// in ios9 array.subarray(from, undefined) will return empty array\n\t\t\t// but array.subarray(from) or array.subarray(from, len) is correct\n\t\t\treturn new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );\n\n\t\t}\n\n\t\treturn array.slice( from, to );\n\n\t},\n\n\t// converts an array to a specific type\n\tconvertArray: function ( array, type, forceClone ) {\n\n\t\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t\t\t! forceClone && array.constructor === type ) return array;\n\n\t\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\t\treturn new type( array ); // create typed array\n\n\t\t}\n\n\t\treturn Array.prototype.slice.call( array ); // create Array\n\n\t},\n\n\tisTypedArray: function ( object ) {\n\n\t\treturn ArrayBuffer.isView( object ) &&\n\t\t\t\t! ( object instanceof DataView );\n\n\t},\n\n\t// returns an array by which times and values can be sorted\n\tgetKeyframeOrder: function ( times ) {\n\n\t\tfunction compareTime( i, j ) {\n\n\t\t\treturn times[ i ] - times[ j ];\n\n\t\t}\n\n\t\tvar n = times.length;\n\t\tvar result = new Array( n );\n\t\tfor ( var i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\t\tresult.sort( compareTime );\n\n\t\treturn result;\n\n\t},\n\n\t// uses the array previously returned by 'getKeyframeOrder' to sort data\n\tsortedArray: function ( values, stride, order ) {\n\n\t\tvar nValues = values.length;\n\t\tvar result = new values.constructor( nValues );\n\n\t\tfor ( var i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\t\tvar srcOffset = order[ i ] * stride;\n\n\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// function for parsing AOS keyframe formats\n\tflattenJSON: function ( jsonKeys, times, values, valuePropertyName ) {\n\n\t\tvar i = 1, key = jsonKeys[ 0 ];\n\n\t\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t}\n\n\t\tif ( key === undefined ) return; // no data\n\n\t\tvar value = key[ valuePropertyName ];\n\t\tif ( value === undefined ) return; // no data\n\n\t\tif ( Array.isArray( value ) ) {\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else if ( value.toArray !== undefined ) {\n\n\t\t\t// ...assume THREE.Math-ish\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else {\n\n\t\t\t// otherwise push as-is\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push( value );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t}\n\n\t}\n\n};\n\n/**\n *\n * A timed sequence of keyframes for a specific property.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction KeyframeTrack( name, times, values, interpolation ) {\n\n\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\tthis.name = name;\n\n\tthis.times = AnimationUtils.convertArray( times, this.TimeBufferType );\n\tthis.values = AnimationUtils.convertArray( values, this.ValueBufferType );\n\n\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\tthis.validate();\n\tthis.optimize();\n\n}\n\n// Static methods:\n\nObject.assign( KeyframeTrack, {\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\tparse: function ( json ) {\n\n\t\tif ( json.type === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t\t}\n\n\t\tvar trackType = KeyframeTrack._getTrackTypeForValueTypeName( json.type );\n\n\t\tif ( json.times === undefined ) {\n\n\t\t\tvar times = [], values = [];\n\n\t\t\tAnimationUtils.flattenJSON( json.keys, times, values, 'value' );\n\n\t\t\tjson.times = times;\n\t\t\tjson.values = values;\n\n\t\t}\n\n\t\t// derived classes can define a static parse method\n\t\tif ( trackType.parse !== undefined ) {\n\n\t\t\treturn trackType.parse( json );\n\n\t\t} else {\n\n\t\t\t// by default, we assume a constructor compatible with the base\n\t\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( track ) {\n\n\t\tvar trackType = track.constructor;\n\n\t\tvar json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== undefined ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': AnimationUtils.convertArray( track.times, Array ),\n\t\t\t\t'values': AnimationUtils.convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tvar interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t},\n\n\t_getTrackTypeForValueTypeName: function ( typeName ) {\n\n\t\tswitch ( typeName.toLowerCase() ) {\n\n\t\t\tcase 'scalar':\n\t\t\tcase 'double':\n\t\t\tcase 'float':\n\t\t\tcase 'number':\n\t\t\tcase 'integer':\n\n\t\t\t\treturn NumberKeyframeTrack;\n\n\t\t\tcase 'vector':\n\t\t\tcase 'vector2':\n\t\t\tcase 'vector3':\n\t\t\tcase 'vector4':\n\n\t\t\t\treturn VectorKeyframeTrack;\n\n\t\t\tcase 'color':\n\n\t\t\t\treturn ColorKeyframeTrack;\n\n\t\t\tcase 'quaternion':\n\n\t\t\t\treturn QuaternionKeyframeTrack;\n\n\t\t\tcase 'bool':\n\t\t\tcase 'boolean':\n\n\t\t\t\treturn BooleanKeyframeTrack;\n\n\t\t\tcase 'string':\n\n\t\t\t\treturn StringKeyframeTrack;\n\n\t\t}\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n\t}\n\n} );\n\nObject.assign( KeyframeTrack.prototype, {\n\n\tconstructor: KeyframeTrack,\n\n\tTimeBufferType: Float32Array,\n\n\tValueBufferType: Float32Array,\n\n\tDefaultInterpolation: InterpolateLinear,\n\n\tInterpolantFactoryMethodDiscrete: function ( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodSmooth: function ( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tsetInterpolation: function ( interpolation ) {\n\n\t\tvar factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tvar message = \"unsupported interpolation for \" +\n\t\t\t\tthis.ValueTypeName + \" keyframe track named \" + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t},\n\n\tgetInterpolation: function () {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t}\n\n\t},\n\n\tgetValueSize: function () {\n\n\t\treturn this.values.length / this.times.length;\n\n\t},\n\n\t// move all keyframes either forwards or backwards in time\n\tshift: function ( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tvar times = this.times;\n\n\t\t\tfor ( var i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale: function ( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tvar times = this.times;\n\n\t\t\tfor ( var i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\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\n\ttrim: function ( startTime, endTime ) {\n\n\t\tvar times = this.times,\n\t\t\tnKeys = times.length,\n\t\t\tfrom = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) to = Math.max( to, 1 ), from = to - 1;\n\n\t\t\tvar stride = this.getValueSize();\n\t\t\tthis.times = AnimationUtils.arraySlice( times, from, to );\n\t\t\tthis.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate: function () {\n\n\t\tvar valid = true;\n\n\t\tvar valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tvar times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tvar prevTime = null;\n\n\t\tfor ( var i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tvar currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( AnimationUtils.isTypedArray( values ) ) {\n\n\t\t\t\tfor ( var i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tvar value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn valid;\n\n\t},\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize: function () {\n\n\t\tvar times = this.times,\n\t\t\tvalues = this.values,\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\twriteIndex = 1,\n\t\t\tlastIndex = times.length - 1;\n\n\t\tfor ( var i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tvar keep = false;\n\n\t\t\tvar time = times[ i ];\n\t\t\tvar timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tvar offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvar value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tvar readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( var readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = AnimationUtils.arraySlice( times, 0, writeIndex );\n\t\t\tthis.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n *\n * A Track of vectored keyframe values.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction VectorKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nVectorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: VectorKeyframeTrack,\n\n\tValueTypeName: 'vector'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n} );\n\n/**\n *\n * Reusable set of Tracks that represent an animation.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n */\n\nfunction AnimationClip( name, duration, tracks ) {\n\n\tthis.name = name;\n\tthis.tracks = tracks;\n\tthis.duration = ( duration !== undefined ) ? duration : - 1;\n\n\tthis.uuid = _Math.generateUUID();\n\n\t// this means it should figure out its duration by scanning the tracks\n\tif ( this.duration < 0 ) {\n\n\t\tthis.resetDuration();\n\n\t}\n\n\tthis.optimize();\n\n}\n\nObject.assign( AnimationClip, {\n\n\tparse: function ( json ) {\n\n\t\tvar tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( var i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.parse( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\treturn new AnimationClip( json.name, json.duration, tracks );\n\n\t},\n\n\ttoJSON: function ( clip ) {\n\n\t\tvar tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tvar json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid\n\n\t\t};\n\n\t\tfor ( var i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t},\n\n\tCreateFromMorphTargetSequence: function ( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tvar numMorphTargets = morphTargetSequence.length;\n\t\tvar tracks = [];\n\n\t\tfor ( var i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tvar times = [];\n\t\t\tvar values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tvar order = AnimationUtils.getKeyframeOrder( times );\n\t\t\ttimes = AnimationUtils.sortedArray( times, 1, order );\n\t\t\tvalues = AnimationUtils.sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new AnimationClip( name, - 1, tracks );\n\n\t},\n\n\tfindByName: function ( objectOrClipArray, name ) {\n\n\t\tvar clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tvar o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( var i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\tCreateClipsFromMorphTargetSequences: function ( morphTargets, fps, noLoop ) {\n\n\t\tvar animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tvar pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( var i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tvar morphTarget = morphTargets[ i ];\n\t\t\tvar parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tvar name = parts[ 1 ];\n\n\t\t\t\tvar animationMorphTargets = animationToMorphTargets[ name ];\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar clips = [];\n\n\t\tfor ( var name in animationToMorphTargets ) {\n\n\t\t\tclips.push( AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t},\n\n\t// parse the animation.hierarchy format\n\tparseAnimation: function ( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tvar times = [];\n\t\t\t\tvar values = [];\n\n\t\t\t\tAnimationUtils.flattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tvar tracks = [];\n\n\t\tvar clipName = animation.name || 'default';\n\t\t// automatic length determination in AnimationClip.\n\t\tvar duration = animation.length || - 1;\n\t\tvar fps = animation.fps || 30;\n\n\t\tvar hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( var h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tvar animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tvar morphTargetNames = {};\n\n\t\t\t\tfor ( var k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( var m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( var morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tvar times = [];\n\t\t\t\t\tvar values = [];\n\n\t\t\t\t\tfor ( var m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tvar animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * ( fps || 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tvar boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar clip = new AnimationClip( clipName, duration, tracks );\n\n\t\treturn clip;\n\n\t}\n\n} );\n\nObject.assign( AnimationClip.prototype, {\n\n\tresetDuration: function () {\n\n\t\tvar tracks = this.tracks, duration = 0;\n\n\t\tfor ( var i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tvar track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t},\n\n\ttrim: function () {\n\n\t\tfor ( var i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\toptimize: function () {\n\n\t\tfor ( var i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction MaterialLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\tthis.textures = {};\n\n}\n\nObject.assign( MaterialLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTextures: function ( value ) {\n\n\t\tthis.textures = value;\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tvar textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tvar material = new Materials[ json.type ]();\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearCoat !== undefined ) material.clearCoat = json.clearCoat;\n\t\tif ( json.clearCoatRoughness !== undefined ) material.clearCoatRoughness = json.clearCoatRoughness;\n\t\tif ( json.uniforms !== undefined ) material.uniforms = json.uniforms;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\t\tif ( json.vertexColors !== undefined ) material.vertexColors = json.vertexColors;\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== 1 ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.skinning !== undefined ) material.skinning = json.skinning;\n\t\tif ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets;\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\t// Deprecated\n\n\t\tif ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\n\t\tif ( json.alphaMap !== undefined ) {\n\n\t\t\tmaterial.alphaMap = getTexture( json.alphaMap );\n\t\t\tmaterial.transparent = true;\n\n\t\t}\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType;\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tvar normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\treturn material;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction BufferGeometryLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( BufferGeometryLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tvar index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tvar typedArray = new TYPED_ARRAYS[ index.type ]( index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tvar attributes = json.data.attributes;\n\n\t\tfor ( var key in attributes ) {\n\n\t\t\tvar attribute = attributes[ key ];\n\t\t\tvar typedArray = new TYPED_ARRAYS[ attribute.type ]( attribute.array );\n\n\t\t\tgeometry.addAttribute( key, new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized ) );\n\n\t\t}\n\n\t\tvar groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( var i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tvar group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tvar center = new Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\nvar TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\t// Workaround for IE11 pre KB2929437. See #11440\n\tUint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Loader() {}\n\nLoader.Handlers = {\n\n\thandlers: [],\n\n\tadd: function ( regex, loader ) {\n\n\t\tthis.handlers.push( regex, loader );\n\n\t},\n\n\tget: function ( file ) {\n\n\t\tvar handlers = this.handlers;\n\n\t\tfor ( var i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\tvar regex = handlers[ i ];\n\t\t\tvar loader = handlers[ i + 1 ];\n\n\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\treturn loader;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n};\n\nObject.assign( Loader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tonLoadStart: function () {},\n\n\tonLoadProgress: function () {},\n\n\tonLoadComplete: function () {},\n\n\tinitMaterials: function ( materials, texturePath, crossOrigin ) {\n\n\t\tvar array = [];\n\n\t\tfor ( var i = 0; i < materials.length; ++ i ) {\n\n\t\t\tarray[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin );\n\n\t\t}\n\n\t\treturn array;\n\n\t},\n\n\tcreateMaterial: ( function () {\n\n\t\tvar BlendingMode = {\n\t\t\tNoBlending: NoBlending,\n\t\t\tNormalBlending: NormalBlending,\n\t\t\tAdditiveBlending: AdditiveBlending,\n\t\t\tSubtractiveBlending: SubtractiveBlending,\n\t\t\tMultiplyBlending: MultiplyBlending,\n\t\t\tCustomBlending: CustomBlending\n\t\t};\n\n\t\tvar color = new Color();\n\t\tvar textureLoader = new TextureLoader();\n\t\tvar materialLoader = new MaterialLoader();\n\n\t\treturn function createMaterial( m, texturePath, crossOrigin ) {\n\n\t\t\t// convert from old material format\n\n\t\t\tvar textures = {};\n\n\t\t\tfunction loadTexture( path, repeat, offset, wrap, anisotropy ) {\n\n\t\t\t\tvar fullPath = texturePath + path;\n\t\t\t\tvar loader = Loader.Handlers.get( fullPath );\n\n\t\t\t\tvar texture;\n\n\t\t\t\tif ( loader !== null ) {\n\n\t\t\t\t\ttexture = loader.load( fullPath );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttextureLoader.setCrossOrigin( crossOrigin );\n\t\t\t\t\ttexture = textureLoader.load( fullPath );\n\n\t\t\t\t}\n\n\t\t\t\tif ( repeat !== undefined ) {\n\n\t\t\t\t\ttexture.repeat.fromArray( repeat );\n\n\t\t\t\t\tif ( repeat[ 0 ] !== 1 ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( repeat[ 1 ] !== 1 ) texture.wrapT = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\t\ttexture.offset.fromArray( offset );\n\n\t\t\t\t}\n\n\t\t\t\tif ( wrap !== undefined ) {\n\n\t\t\t\t\tif ( wrap[ 0 ] === 'repeat' ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 0 ] === 'mirror' ) texture.wrapS = MirroredRepeatWrapping;\n\n\t\t\t\t\tif ( wrap[ 1 ] === 'repeat' ) texture.wrapT = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 1 ] === 'mirror' ) texture.wrapT = MirroredRepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( anisotropy !== undefined ) {\n\n\t\t\t\t\ttexture.anisotropy = anisotropy;\n\n\t\t\t\t}\n\n\t\t\t\tvar uuid = _Math.generateUUID();\n\n\t\t\t\ttextures[ uuid ] = texture;\n\n\t\t\t\treturn uuid;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar json = {\n\t\t\t\tuuid: _Math.generateUUID(),\n\t\t\t\ttype: 'MeshLambertMaterial'\n\t\t\t};\n\n\t\t\tfor ( var name in m ) {\n\n\t\t\t\tvar value = m[ name ];\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'DbgColor':\n\t\t\t\t\tcase 'DbgIndex':\n\t\t\t\t\tcase 'opticalDensity':\n\t\t\t\t\tcase 'illumination':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'DbgName':\n\t\t\t\t\t\tjson.name = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blending':\n\t\t\t\t\t\tjson.blending = BlendingMode[ value ];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorAmbient':\n\t\t\t\t\tcase 'mapAmbient':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorDiffuse':\n\t\t\t\t\t\tjson.color = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorSpecular':\n\t\t\t\t\t\tjson.specular = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorEmissive':\n\t\t\t\t\t\tjson.emissive = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'specularCoef':\n\t\t\t\t\t\tjson.shininess = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'shading':\n\t\t\t\t\t\tif ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'standard' ) json.type = 'MeshStandardMaterial';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuse':\n\t\t\t\t\t\tjson.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuseRepeat':\n\t\t\t\t\tcase 'mapDiffuseOffset':\n\t\t\t\t\tcase 'mapDiffuseWrap':\n\t\t\t\t\tcase 'mapDiffuseAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissive':\n\t\t\t\t\t\tjson.emissiveMap = loadTexture( value, m.mapEmissiveRepeat, m.mapEmissiveOffset, m.mapEmissiveWrap, m.mapEmissiveAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissiveRepeat':\n\t\t\t\t\tcase 'mapEmissiveOffset':\n\t\t\t\t\tcase 'mapEmissiveWrap':\n\t\t\t\t\tcase 'mapEmissiveAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLight':\n\t\t\t\t\t\tjson.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLightRepeat':\n\t\t\t\t\tcase 'mapLightOffset':\n\t\t\t\t\tcase 'mapLightWrap':\n\t\t\t\t\tcase 'mapLightAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAO':\n\t\t\t\t\t\tjson.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAORepeat':\n\t\t\t\t\tcase 'mapAOOffset':\n\t\t\t\t\tcase 'mapAOWrap':\n\t\t\t\t\tcase 'mapAOAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBump':\n\t\t\t\t\t\tjson.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpScale':\n\t\t\t\t\t\tjson.bumpScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpRepeat':\n\t\t\t\t\tcase 'mapBumpOffset':\n\t\t\t\t\tcase 'mapBumpWrap':\n\t\t\t\t\tcase 'mapBumpAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormal':\n\t\t\t\t\t\tjson.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalFactor':\n\t\t\t\t\t\tjson.normalScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalRepeat':\n\t\t\t\t\tcase 'mapNormalOffset':\n\t\t\t\t\tcase 'mapNormalWrap':\n\t\t\t\t\tcase 'mapNormalAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecular':\n\t\t\t\t\t\tjson.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecularRepeat':\n\t\t\t\t\tcase 'mapSpecularOffset':\n\t\t\t\t\tcase 'mapSpecularWrap':\n\t\t\t\t\tcase 'mapSpecularAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalness':\n\t\t\t\t\t\tjson.metalnessMap = loadTexture( value, m.mapMetalnessRepeat, m.mapMetalnessOffset, m.mapMetalnessWrap, m.mapMetalnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalnessRepeat':\n\t\t\t\t\tcase 'mapMetalnessOffset':\n\t\t\t\t\tcase 'mapMetalnessWrap':\n\t\t\t\t\tcase 'mapMetalnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughness':\n\t\t\t\t\t\tjson.roughnessMap = loadTexture( value, m.mapRoughnessRepeat, m.mapRoughnessOffset, m.mapRoughnessWrap, m.mapRoughnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughnessRepeat':\n\t\t\t\t\tcase 'mapRoughnessOffset':\n\t\t\t\t\tcase 'mapRoughnessWrap':\n\t\t\t\t\tcase 'mapRoughnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlpha':\n\t\t\t\t\t\tjson.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlphaRepeat':\n\t\t\t\t\tcase 'mapAlphaOffset':\n\t\t\t\t\tcase 'mapAlphaWrap':\n\t\t\t\t\tcase 'mapAlphaAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'flipSided':\n\t\t\t\t\t\tjson.side = BackSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'doubleSided':\n\t\t\t\t\t\tjson.side = DoubleSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' );\n\t\t\t\t\t\tjson.opacity = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'depthTest':\n\t\t\t\t\tcase 'depthWrite':\n\t\t\t\t\tcase 'colorWrite':\n\t\t\t\t\tcase 'opacity':\n\t\t\t\t\tcase 'reflectivity':\n\t\t\t\t\tcase 'transparent':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\tcase 'wireframe':\n\t\t\t\t\t\tjson[ name ] = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vertexColors':\n\t\t\t\t\t\tif ( value === true ) json.vertexColors = VertexColors;\n\t\t\t\t\t\tif ( value === 'face' ) json.vertexColors = FaceColors;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.Loader.createMaterial: Unsupported', name, value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.type === 'MeshBasicMaterial' ) delete json.emissive;\n\t\t\tif ( json.type !== 'MeshPhongMaterial' ) delete json.specular;\n\n\t\t\tif ( json.opacity < 1 ) json.transparent = true;\n\n\t\t\tmaterialLoader.setTextures( textures );\n\n\t\t\treturn materialLoader.parse( json );\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * @author Don McCurdy / https://www.donmccurdy.com\n */\n\nvar LoaderUtils = {\n\n\tdecodeText: function ( array ) {\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tvar s = '';\n\n\t\tfor ( var i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\t// Merges multi-byte utf-8 characters.\n\t\treturn decodeURIComponent( escape( s ) );\n\n\t},\n\n\textractUrlBase: function ( url ) {\n\n\t\tvar index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.substr( 0, index + 1 );\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction JSONLoader( manager ) {\n\n\tif ( typeof manager === 'boolean' ) {\n\n\t\tconsole.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' );\n\t\tmanager = undefined;\n\n\t}\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\tthis.withCredentials = false;\n\n}\n\nObject.assign( JSONLoader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texturePath = this.texturePath && ( typeof this.texturePath === 'string' ) ? this.texturePath : LoaderUtils.extractUrlBase( url );\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json = JSON.parse( text );\n\t\t\tvar metadata = json.metadata;\n\n\t\t\tif ( metadata !== undefined ) {\n\n\t\t\t\tvar type = metadata.type;\n\n\t\t\t\tif ( type !== undefined ) {\n\n\t\t\t\t\tif ( type.toLowerCase() === 'object' ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.ObjectLoader instead.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar object = scope.parse( json, texturePath );\n\t\t\tonLoad( object.geometry, object.materials );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetTexturePath: function ( value ) {\n\n\t\tthis.texturePath = value;\n\t\treturn this;\n\n\t},\n\n\tparse: ( function () {\n\n\t\tfunction parseModel( json, geometry ) {\n\n\t\t\tfunction isBitSet( value, position ) {\n\n\t\t\t\treturn value & ( 1 << position );\n\n\t\t\t}\n\n\t\t\tvar i, j, fi,\n\n\t\t\t\toffset, zLength,\n\n\t\t\t\tcolorIndex, normalIndex, uvIndex, materialIndex,\n\n\t\t\t\ttype,\n\t\t\t\tisQuad,\n\t\t\t\thasMaterial,\n\t\t\t\thasFaceVertexUv,\n\t\t\t\thasFaceNormal, hasFaceVertexNormal,\n\t\t\t\thasFaceColor, hasFaceVertexColor,\n\n\t\t\t\tvertex, face, faceA, faceB, hex, normal,\n\n\t\t\t\tuvLayer, uv, u, v,\n\n\t\t\t\tfaces = json.faces,\n\t\t\t\tvertices = json.vertices,\n\t\t\t\tnormals = json.normals,\n\t\t\t\tcolors = json.colors,\n\n\t\t\t\tscale = json.scale,\n\n\t\t\t\tnUvLayers = 0;\n\n\n\t\t\tif ( json.uvs !== undefined ) {\n\n\t\t\t\t// disregard empty arrays\n\n\t\t\t\tfor ( i = 0; i < json.uvs.length; i ++ ) {\n\n\t\t\t\t\tif ( json.uvs[ i ].length ) nUvLayers ++;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\tgeometry.faceVertexUvs[ i ] = [];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = vertices.length;\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\tvertex = new Vector3();\n\n\t\t\t\tvertex.x = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.y = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.z = vertices[ offset ++ ] * scale;\n\n\t\t\t\tgeometry.vertices.push( vertex );\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = faces.length;\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\ttype = faces[ offset ++ ];\n\n\t\t\t\tisQuad = isBitSet( type, 0 );\n\t\t\t\thasMaterial = isBitSet( type, 1 );\n\t\t\t\thasFaceVertexUv = isBitSet( type, 3 );\n\t\t\t\thasFaceNormal = isBitSet( type, 4 );\n\t\t\t\thasFaceVertexNormal = isBitSet( type, 5 );\n\t\t\t\thasFaceColor = isBitSet( type, 6 );\n\t\t\t\thasFaceVertexColor = isBitSet( type, 7 );\n\n\t\t\t\t// console.log(\"type\", type, \"bits\", isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor);\n\n\t\t\t\tif ( isQuad ) {\n\n\t\t\t\t\tfaceA = new Face3();\n\t\t\t\t\tfaceA.a = faces[ offset ];\n\t\t\t\t\tfaceA.b = faces[ offset + 1 ];\n\t\t\t\t\tfaceA.c = faces[ offset + 3 ];\n\n\t\t\t\t\tfaceB = new Face3();\n\t\t\t\t\tfaceB.a = faces[ offset + 1 ];\n\t\t\t\t\tfaceB.b = faces[ offset + 2 ];\n\t\t\t\t\tfaceB.c = faces[ offset + 3 ];\n\n\t\t\t\t\toffset += 4;\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tfaceA.materialIndex = materialIndex;\n\t\t\t\t\t\tfaceB.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi + 1 ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tif ( j !== 2 ) geometry.faceVertexUvs[ i ][ fi ].push( uv );\n\t\t\t\t\t\t\t\tif ( j !== 0 ) geometry.faceVertexUvs[ i ][ fi + 1 ].push( uv );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tfaceA.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tfaceB.normal.copy( faceA.normal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexNormals.push( normal );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\tfaceA.color.setHex( hex );\n\t\t\t\t\t\tfaceB.color.setHex( hex );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexColors.push( new Color( hex ) );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexColors.push( new Color( hex ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( faceA );\n\t\t\t\t\tgeometry.faces.push( faceB );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface = new Face3();\n\t\t\t\t\tface.a = faces[ offset ++ ];\n\t\t\t\t\tface.b = faces[ offset ++ ];\n\t\t\t\t\tface.c = faces[ offset ++ ];\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ].push( uv );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tface.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tface.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.color.setHex( colors[ colorIndex ] );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\tface.vertexColors.push( new Color( colors[ colorIndex ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( face );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseSkin( json, geometry ) {\n\n\t\t\tvar influencesPerVertex = ( json.influencesPerVertex !== undefined ) ? json.influencesPerVertex : 2;\n\n\t\t\tif ( json.skinWeights ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinWeights.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar x = json.skinWeights[ i ];\n\t\t\t\t\tvar y = ( influencesPerVertex > 1 ) ? json.skinWeights[ i + 1 ] : 0;\n\t\t\t\t\tvar z = ( influencesPerVertex > 2 ) ? json.skinWeights[ i + 2 ] : 0;\n\t\t\t\t\tvar w = ( influencesPerVertex > 3 ) ? json.skinWeights[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinWeights.push( new Vector4( x, y, z, w ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.skinIndices ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinIndices.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar a = json.skinIndices[ i ];\n\t\t\t\t\tvar b = ( influencesPerVertex > 1 ) ? json.skinIndices[ i + 1 ] : 0;\n\t\t\t\t\tvar c = ( influencesPerVertex > 2 ) ? json.skinIndices[ i + 2 ] : 0;\n\t\t\t\t\tvar d = ( influencesPerVertex > 3 ) ? json.skinIndices[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinIndices.push( new Vector4( a, b, c, d ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.bones = json.bones;\n\n\t\t\tif ( geometry.bones && geometry.bones.length > 0 && ( geometry.skinWeights.length !== geometry.skinIndices.length || geometry.skinIndices.length !== geometry.vertices.length ) ) {\n\n\t\t\t\tconsole.warn( 'When skinning, number of vertices (' + geometry.vertices.length + '), skinIndices (' +\n\t\t\t\t\tgeometry.skinIndices.length + '), and skinWeights (' + geometry.skinWeights.length + ') should match.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseMorphing( json, geometry ) {\n\n\t\t\tvar scale = json.scale;\n\n\t\t\tif ( json.morphTargets !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, l = json.morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\t\tgeometry.morphTargets[ i ] = {};\n\t\t\t\t\tgeometry.morphTargets[ i ].name = json.morphTargets[ i ].name;\n\t\t\t\t\tgeometry.morphTargets[ i ].vertices = [];\n\n\t\t\t\t\tvar dstVertices = geometry.morphTargets[ i ].vertices;\n\t\t\t\t\tvar srcVertices = json.morphTargets[ i ].vertices;\n\n\t\t\t\t\tfor ( var v = 0, vl = srcVertices.length; v < vl; v += 3 ) {\n\n\t\t\t\t\t\tvar vertex = new Vector3();\n\t\t\t\t\t\tvertex.x = srcVertices[ v ] * scale;\n\t\t\t\t\t\tvertex.y = srcVertices[ v + 1 ] * scale;\n\t\t\t\t\t\tvertex.z = srcVertices[ v + 2 ] * scale;\n\n\t\t\t\t\t\tdstVertices.push( vertex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.morphColors !== undefined && json.morphColors.length > 0 ) {\n\n\t\t\t\tconsole.warn( 'THREE.JSONLoader: \"morphColors\" no longer supported. Using them as face colors.' );\n\n\t\t\t\tvar faces = geometry.faces;\n\t\t\t\tvar morphColors = json.morphColors[ 0 ].colors;\n\n\t\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\t\tfaces[ i ].color.fromArray( morphColors, i * 3 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseAnimations( json, geometry ) {\n\n\t\t\tvar outputAnimations = [];\n\n\t\t\t// parse old style Bone/Hierarchy animations\n\t\t\tvar animations = [];\n\n\t\t\tif ( json.animation !== undefined ) {\n\n\t\t\t\tanimations.push( json.animation );\n\n\t\t\t}\n\n\t\t\tif ( json.animations !== undefined ) {\n\n\t\t\t\tif ( json.animations.length ) {\n\n\t\t\t\t\tanimations = animations.concat( json.animations );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tanimations.push( json.animations );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < animations.length; i ++ ) {\n\n\t\t\t\tvar clip = AnimationClip.parseAnimation( animations[ i ], geometry.bones );\n\t\t\t\tif ( clip ) outputAnimations.push( clip );\n\n\t\t\t}\n\n\t\t\t// parse implicit morph animations\n\t\t\tif ( geometry.morphTargets ) {\n\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.\n\t\t\t\tvar morphAnimationClips = AnimationClip.CreateClipsFromMorphTargetSequences( geometry.morphTargets, 10 );\n\t\t\t\toutputAnimations = outputAnimations.concat( morphAnimationClips );\n\n\t\t\t}\n\n\t\t\tif ( outputAnimations.length > 0 ) geometry.animations = outputAnimations;\n\n\t\t}\n\n\t\treturn function parse( json, texturePath ) {\n\n\t\t\tif ( json.data !== undefined ) {\n\n\t\t\t\t// Geometry 4.0 spec\n\t\t\t\tjson = json.data;\n\n\t\t\t}\n\n\t\t\tif ( json.scale !== undefined ) {\n\n\t\t\t\tjson.scale = 1.0 / json.scale;\n\n\t\t\t} else {\n\n\t\t\t\tjson.scale = 1.0;\n\n\t\t\t}\n\n\t\t\tvar geometry = new Geometry();\n\n\t\t\tparseModel( json, geometry );\n\t\t\tparseSkin( json, geometry );\n\t\t\tparseMorphing( json, geometry );\n\t\t\tparseAnimations( json, geometry );\n\n\t\t\tgeometry.computeFaceNormals();\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\tif ( json.materials === undefined || json.materials.length === 0 ) {\n\n\t\t\t\treturn { geometry: geometry };\n\n\t\t\t} else {\n\n\t\t\t\tvar materials = Loader.prototype.initMaterials( json.materials, texturePath, this.crossOrigin );\n\n\t\t\t\treturn { geometry: geometry, materials: materials };\n\n\t\t\t}\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction ObjectLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\tthis.texturePath = '';\n\n}\n\nObject.assign( ObjectLoader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.texturePath === '' ) {\n\n\t\t\tthis.texturePath = url.substring( 0, url.lastIndexOf( '/' ) + 1 );\n\n\t\t}\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tvar metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url + '. Use THREE.JSONLoader instead.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTexturePath: function ( value ) {\n\n\t\tthis.texturePath = value;\n\t\treturn this;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tparse: function ( json, onLoad ) {\n\n\t\tvar shapes = this.parseShape( json.shapes );\n\t\tvar geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tvar images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tvar textures = this.parseTextures( json.textures, images );\n\t\tvar materials = this.parseMaterials( json.materials, textures );\n\n\t\tvar object = this.parseObject( json.object, geometries, materials );\n\n\t\tif ( json.animations ) {\n\n\t\t\tobject.animations = this.parseAnimations( json.animations );\n\n\t\t}\n\n\t\tif ( json.images === undefined || json.images.length === 0 ) {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t},\n\n\tparseShape: function ( json ) {\n\n\t\tvar shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t},\n\n\tparseGeometries: function ( json, shapes ) {\n\n\t\tvar geometries = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tvar geometryLoader = new JSONLoader();\n\t\t\tvar bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar geometry;\n\t\t\t\tvar data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'PlaneGeometry':\n\t\t\t\t\tcase 'PlaneBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BoxGeometry':\n\t\t\t\t\tcase 'BoxBufferGeometry':\n\t\t\t\t\tcase 'CubeGeometry': // backwards compatible\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.depth,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.depthSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CircleGeometry':\n\t\t\t\t\tcase 'CircleBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CylinderGeometry':\n\t\t\t\t\tcase 'CylinderBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radiusTop,\n\t\t\t\t\t\t\tdata.radiusBottom,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ConeGeometry':\n\t\t\t\t\tcase 'ConeBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SphereGeometry':\n\t\t\t\t\tcase 'SphereBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'DodecahedronGeometry':\n\t\t\t\t\tcase 'DodecahedronBufferGeometry':\n\t\t\t\t\tcase 'IcosahedronGeometry':\n\t\t\t\t\tcase 'IcosahedronBufferGeometry':\n\t\t\t\t\tcase 'OctahedronGeometry':\n\t\t\t\t\tcase 'OctahedronBufferGeometry':\n\t\t\t\t\tcase 'TetrahedronGeometry':\n\t\t\t\t\tcase 'TetrahedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.detail\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RingGeometry':\n\t\t\t\t\tcase 'RingBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.innerRadius,\n\t\t\t\t\t\t\tdata.outerRadius,\n\t\t\t\t\t\t\tdata.thetaSegments,\n\t\t\t\t\t\t\tdata.phiSegments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusGeometry':\n\t\t\t\t\tcase 'TorusBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.arc\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusKnotGeometry':\n\t\t\t\t\tcase 'TorusKnotBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.p,\n\t\t\t\t\t\t\tdata.q\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LatheGeometry':\n\t\t\t\t\tcase 'LatheBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.points,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PolyhedronGeometry':\n\t\t\t\t\tcase 'PolyhedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.vertices,\n\t\t\t\t\t\t\tdata.indices,\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.details\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ShapeGeometry':\n\t\t\t\t\tcase 'ShapeBufferGeometry':\n\n\t\t\t\t\t\tvar geometryShapes = [];\n\n\t\t\t\t\t\tfor ( var j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tvar shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\tdata.curveSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\n\t\t\t\t\tcase 'ExtrudeGeometry':\n\t\t\t\t\tcase 'ExtrudeBufferGeometry':\n\n\t\t\t\t\t\tvar geometryShapes = [];\n\n\t\t\t\t\t\tfor ( var j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tvar shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar extrudePath = data.options.extrudePath;\n\n\t\t\t\t\t\tif ( extrudePath !== undefined ) {\n\n\t\t\t\t\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\tdata.options\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Geometry':\n\n\t\t\t\t\t\tgeometry = geometryLoader.parse( data, this.texturePath ).geometry;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Unsupported geometry type \"' + data.type + '\"' );\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\tif ( geometry.isBufferGeometry === true && data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t},\n\n\tparseMaterials: function ( json, textures ) {\n\n\t\tvar materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tvar loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar data = json[ i ];\n\n\t\t\t\tif ( data.type === 'MultiMaterial' ) {\n\n\t\t\t\t\t// Deprecated\n\n\t\t\t\t\tvar array = [];\n\n\t\t\t\t\tfor ( var j = 0; j < data.materials.length; j ++ ) {\n\n\t\t\t\t\t\tarray.push( loader.parse( data.materials[ j ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = array;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmaterials[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t},\n\n\tparseAnimations: function ( json ) {\n\n\t\tvar animations = [];\n\n\t\tfor ( var i = 0; i < json.length; i ++ ) {\n\n\t\t\tvar data = json[ i ];\n\n\t\t\tvar clip = AnimationClip.parse( data );\n\n\t\t\tif ( data.uuid !== undefined ) clip.uuid = data.uuid;\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t},\n\n\tparseImages: function ( json, onLoad ) {\n\n\t\tvar scope = this;\n\t\tvar images = {};\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tvar manager = new LoadingManager( onLoad );\n\n\t\t\tvar loader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( var i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tvar image = json[ i ];\n\t\t\t\tvar url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\timages[ image.uuid ] = [];\n\n\t\t\t\t\tfor ( var j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar currentUrl = url[ j ];\n\n\t\t\t\t\t\tvar path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( currentUrl ) ? currentUrl : scope.texturePath + currentUrl;\n\n\t\t\t\t\t\timages[ image.uuid ].push( loadImage( path ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tvar path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( image.url ) ? image.url : scope.texturePath + image.url;\n\n\t\t\t\t\timages[ image.uuid ] = loadImage( path );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t},\n\n\tparseTextures: function ( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tvar textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tvar texture;\n\n\t\t\t\tif ( Array.isArray( images[ data.image ] ) ) {\n\n\t\t\t\t\ttexture = new CubeTexture( images[ data.image ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture = new Texture( images[ data.image ] );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t},\n\n\tparseObject: function ( data, geometries, materials ) {\n\n\t\tvar object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tvar array = [];\n\n\t\t\t\tfor ( var i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.' );\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tvar geometry = getGeometry( data.geometry );\n\t\t\t\tvar material = getMaterial( data.material );\n\n\t\t\t\tif ( geometry.bones && geometry.bones.length > 0 ) {\n\n\t\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tvar children = data.children;\n\n\t\t\tfor ( var i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tvar levels = data.levels;\n\n\t\t\tfor ( var l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tvar level = levels[ l ];\n\t\t\t\tvar child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n} );\n\nvar TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tSphericalReflectionMapping: SphericalReflectionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping,\n\tCubeUVRefractionMapping: CubeUVRefractionMapping\n};\n\nvar TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nvar TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipMapNearestFilter: NearestMipMapNearestFilter,\n\tNearestMipMapLinearFilter: NearestMipMapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipMapNearestFilter: LinearMipMapNearestFilter,\n\tLinearMipMapLinearFilter: LinearMipMapLinearFilter\n};\n\n/**\n * @author thespite / http://clicktorelease.com/\n */\n\n\nfunction ImageBitmapLoader( manager ) {\n\n\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t}\n\n\tif ( typeof fetch === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t}\n\n\tthis.manager = manager !== undefined ? manager : DefaultLoadingManager;\n\tthis.options = undefined;\n\n}\n\nImageBitmapLoader.prototype = {\n\n\tconstructor: ImageBitmapLoader,\n\n\tsetOptions: function setOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t},\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tvar scope = this;\n\n\t\tvar cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tfetch( url ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, scope.options );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tscope.manager.itemEnd( url );\n\t\t\tscope.manager.itemError( url );\n\n\t\t} );\n\n\t},\n\n\tsetCrossOrigin: function ( /* value */ ) {\n\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n};\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * minimal class for proxing functions to Path. Replaces old \"extractSubpaths()\"\n **/\n\nfunction ShapePath() {\n\n\tthis.type = 'ShapePath';\n\n\tthis.color = new Color();\n\n\tthis.subPaths = [];\n\tthis.currentPath = null;\n\n}\n\nObject.assign( ShapePath.prototype, {\n\n\tmoveTo: function ( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t},\n\n\tlineTo: function ( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t},\n\n\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t},\n\n\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t},\n\n\tsplineThru: function ( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t},\n\n\ttoShapes: function ( isCCW, noHoles ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tvar shapes = [];\n\n\t\t\tfor ( var i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tvar tmpPath = inSubpaths[ i ];\n\n\t\t\t\tvar tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tvar polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t// with the horizontal line through inPt, left of inPt\n\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tvar inside = false;\n\t\t\tfor ( var p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tvar edgeLowPt = inPolygon[ p ];\n\t\t\t\tvar edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tvar edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tvar edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tvar isClockWise = ShapeUtils.isClockWise;\n\n\t\tvar subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tif ( noHoles === true )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tvar solid, tmpPath, tmpShape, shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tvar holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tvar betterShapeHoles = [];\n\t\tvar newShapes = [];\n\t\tvar newShapeHoles = [];\n\t\tvar mainIdx = 0;\n\t\tvar tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( var i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tvar ambiguous = false;\n\t\t\tvar toChange = [];\n\n\t\t\tfor ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tvar sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( var hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tvar ho = sho[ hIdx ];\n\t\t\t\t\tvar hole_unassigned = true;\n\n\t\t\t\t\tfor ( var s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } );\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t// console.log(\"ambiguous: \", ambiguous);\n\t\t\tif ( toChange.length > 0 ) {\n\n\t\t\t\t// console.log(\"to change: \", toChange);\n\t\t\t\tif ( ! ambiguous )\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar tmpHoles;\n\n\t\tfor ( var i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( var j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author mrdoob / http://mrdoob.com/\n */\n\n\nfunction Font( data ) {\n\n\tthis.type = 'Font';\n\n\tthis.data = data;\n\n}\n\nObject.assign( Font.prototype, {\n\n\tisFont: true,\n\n\tgenerateShapes: function ( text, size ) {\n\n\t\tif ( size === undefined ) size = 100;\n\n\t\tvar shapes = [];\n\t\tvar paths = createPaths( text, size, this.data );\n\n\t\tfor ( var p = 0, pl = paths.length; p < pl; p ++ ) {\n\n\t\t\tArray.prototype.push.apply( shapes, paths[ p ].toShapes() );\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n} );\n\nfunction createPaths( text, size, data ) {\n\n\tvar chars = Array.from ? Array.from( text ) : String( text ).split( '' ); // see #13988\n\tvar scale = size / data.resolution;\n\tvar line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;\n\n\tvar paths = [];\n\n\tvar offsetX = 0, offsetY = 0;\n\n\tfor ( var i = 0; i < chars.length; i ++ ) {\n\n\t\tvar char = chars[ i ];\n\n\t\tif ( char === '\\n' ) {\n\n\t\t\toffsetX = 0;\n\t\t\toffsetY -= line_height;\n\n\t\t} else {\n\n\t\t\tvar ret = createPath( char, scale, offsetX, offsetY, data );\n\t\t\toffsetX += ret.offsetX;\n\t\t\tpaths.push( ret.path );\n\n\t\t}\n\n\t}\n\n\treturn paths;\n\n}\n\nfunction createPath( char, scale, offsetX, offsetY, data ) {\n\n\tvar glyph = data.glyphs[ char ] || data.glyphs[ '?' ];\n\n\tif ( ! glyph ) return;\n\n\tvar path = new ShapePath();\n\n\tvar x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n\n\tif ( glyph.o ) {\n\n\t\tvar outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\n\n\t\tfor ( var i = 0, l = outline.length; i < l; ) {\n\n\t\t\tvar action = outline[ i ++ ];\n\n\t\t\tswitch ( action ) {\n\n\t\t\t\tcase 'm': // moveTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'l': // lineTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'q': // quadraticCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.quadraticCurveTo( cpx1, cpy1, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'b': // bezierCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx2 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy2 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { offsetX: glyph.ha * scale, path: path };\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction FontLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( FontLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tconsole.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' );\n\t\t\t\tjson = JSON.parse( text.substring( 65, text.length - 2 ) );\n\n\t\t\t}\n\n\t\t\tvar font = scope.parse( json );\n\n\t\t\tif ( onLoad ) onLoad( font );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\treturn new Font( json );\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar context;\n\nvar AudioContext = {\n\n\tgetContext: function () {\n\n\t\tif ( context === undefined ) {\n\n\t\t\tcontext = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn context;\n\n\t},\n\n\tsetContext: function ( value ) {\n\n\t\tcontext = value;\n\n\t}\n\n};\n\n/**\n * @author Reece Aaron Lecrivain / http://reecenotes.com/\n */\n\nfunction AudioLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( AudioLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\tvar bufferCopy = buffer.slice( 0 );\n\n\t\t\tvar context = AudioContext.getContext();\n\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t} );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction StereoCamera() {\n\n\tthis.type = 'StereoCamera';\n\n\tthis.aspect = 1;\n\n\tthis.eyeSep = 0.064;\n\n\tthis.cameraL = new PerspectiveCamera();\n\tthis.cameraL.layers.enable( 1 );\n\tthis.cameraL.matrixAutoUpdate = false;\n\n\tthis.cameraR = new PerspectiveCamera();\n\tthis.cameraR.layers.enable( 2 );\n\tthis.cameraR.matrixAutoUpdate = false;\n\n}\n\nObject.assign( StereoCamera.prototype, {\n\n\tupdate: ( function () {\n\n\t\tvar instance, focus, fov, aspect, near, far, zoom, eyeSep;\n\n\t\tvar eyeRight = new Matrix4();\n\t\tvar eyeLeft = new Matrix4();\n\n\t\treturn function update( camera ) {\n\n\t\t\tvar needsUpdate = instance !== this || focus !== camera.focus || fov !== camera.fov ||\n\t\t\t\t\t\t\t\t\t\t\t\taspect !== camera.aspect * this.aspect || near !== camera.near ||\n\t\t\t\t\t\t\t\t\t\t\t\tfar !== camera.far || zoom !== camera.zoom || eyeSep !== this.eyeSep;\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\tinstance = this;\n\t\t\t\tfocus = camera.focus;\n\t\t\t\tfov = camera.fov;\n\t\t\t\taspect = camera.aspect * this.aspect;\n\t\t\t\tnear = camera.near;\n\t\t\t\tfar = camera.far;\n\t\t\t\tzoom = camera.zoom;\n\n\t\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t\tvar projectionMatrix = camera.projectionMatrix.clone();\n\t\t\t\teyeSep = this.eyeSep / 2;\n\t\t\t\tvar eyeSepOnProjection = eyeSep * near / focus;\n\t\t\t\tvar ymax = ( near * Math.tan( _Math.DEG2RAD * fov * 0.5 ) ) / zoom;\n\t\t\t\tvar xmin, xmax;\n\n\t\t\t\t// translate xOffset\n\n\t\t\t\teyeLeft.elements[ 12 ] = - eyeSep;\n\t\t\t\teyeRight.elements[ 12 ] = eyeSep;\n\n\t\t\t\t// for left eye\n\n\t\t\t\txmin = - ymax * aspect + eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect + eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t\t// for right eye\n\n\t\t\t\txmin = - ymax * aspect - eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect - eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t}\n\n\t\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft );\n\t\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight );\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * Camera for rendering cube maps\n *\t- renders scene into axis-aligned cube\n *\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction CubeCamera( near, far, cubeResolution ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'CubeCamera';\n\n\tvar fov = 90, aspect = 1;\n\n\tvar cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPX.up.set( 0, - 1, 0 );\n\tcameraPX.lookAt( new Vector3( 1, 0, 0 ) );\n\tthis.add( cameraPX );\n\n\tvar cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNX.up.set( 0, - 1, 0 );\n\tcameraNX.lookAt( new Vector3( - 1, 0, 0 ) );\n\tthis.add( cameraNX );\n\n\tvar cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPY.up.set( 0, 0, 1 );\n\tcameraPY.lookAt( new Vector3( 0, 1, 0 ) );\n\tthis.add( cameraPY );\n\n\tvar cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNY.up.set( 0, 0, - 1 );\n\tcameraNY.lookAt( new Vector3( 0, - 1, 0 ) );\n\tthis.add( cameraNY );\n\n\tvar cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPZ.up.set( 0, - 1, 0 );\n\tcameraPZ.lookAt( new Vector3( 0, 0, 1 ) );\n\tthis.add( cameraPZ );\n\n\tvar cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNZ.up.set( 0, - 1, 0 );\n\tcameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );\n\tthis.add( cameraNZ );\n\n\tvar options = { format: RGBFormat, magFilter: LinearFilter, minFilter: LinearFilter };\n\n\tthis.renderTarget = new WebGLRenderTargetCube( cubeResolution, cubeResolution, options );\n\tthis.renderTarget.texture.name = \"CubeCamera\";\n\n\tthis.update = function ( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tvar renderTarget = this.renderTarget;\n\t\tvar generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderTarget.activeCubeFace = 0;\n\t\trenderer.render( scene, cameraPX, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 1;\n\t\trenderer.render( scene, cameraNX, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 2;\n\t\trenderer.render( scene, cameraPY, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 3;\n\t\trenderer.render( scene, cameraNY, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 4;\n\t\trenderer.render( scene, cameraPZ, renderTarget );\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderTarget.activeCubeFace = 5;\n\t\trenderer.render( scene, cameraNZ, renderTarget );\n\n\t\trenderer.setRenderTarget( null );\n\n\t};\n\n\tthis.clear = function ( renderer, color, depth, stencil ) {\n\n\t\tvar renderTarget = this.renderTarget;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\trenderTarget.activeCubeFace = i;\n\t\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( null );\n\n\t};\n\n}\n\nCubeCamera.prototype = Object.create( Object3D.prototype );\nCubeCamera.prototype.constructor = CubeCamera;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AudioListener() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'AudioListener';\n\n\tthis.context = AudioContext.getContext();\n\n\tthis.gain = this.context.createGain();\n\tthis.gain.connect( this.context.destination );\n\n\tthis.filter = null;\n\n}\n\nAudioListener.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: AudioListener,\n\n\tgetInput: function () {\n\n\t\treturn this.gain;\n\n\t},\n\n\tremoveFilter: function ( ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetFilter: function () {\n\n\t\treturn this.filter;\n\n\t},\n\n\tsetFilter: function ( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t\treturn this;\n\n\t},\n\n\tgetMasterVolume: function () {\n\n\t\treturn this.gain.gain.value;\n\n\t},\n\n\tsetMasterVolume: function ( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t},\n\n\tupdateMatrixWorld: ( function () {\n\n\t\tvar position = new Vector3();\n\t\tvar quaternion = new Quaternion();\n\t\tvar scale = new Vector3();\n\n\t\tvar orientation = new Vector3();\n\n\t\treturn function updateMatrixWorld( force ) {\n\n\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\tvar listener = this.context.listener;\n\t\t\tvar up = this.up;\n\n\t\t\tthis.matrixWorld.decompose( position, quaternion, scale );\n\n\t\t\torientation.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\n\t\t\tif ( listener.positionX ) {\n\n\t\t\t\tlistener.positionX.setValueAtTime( position.x, this.context.currentTime );\n\t\t\t\tlistener.positionY.setValueAtTime( position.y, this.context.currentTime );\n\t\t\t\tlistener.positionZ.setValueAtTime( position.z, this.context.currentTime );\n\t\t\t\tlistener.forwardX.setValueAtTime( orientation.x, this.context.currentTime );\n\t\t\t\tlistener.forwardY.setValueAtTime( orientation.y, this.context.currentTime );\n\t\t\t\tlistener.forwardZ.setValueAtTime( orientation.z, this.context.currentTime );\n\t\t\t\tlistener.upX.setValueAtTime( up.x, this.context.currentTime );\n\t\t\t\tlistener.upY.setValueAtTime( up.y, this.context.currentTime );\n\t\t\t\tlistener.upZ.setValueAtTime( up.z, this.context.currentTime );\n\n\t\t\t} else {\n\n\t\t\t\tlistener.setPosition( position.x, position.y, position.z );\n\t\t\t\tlistener.setOrientation( orientation.x, orientation.y, orientation.z, up.x, up.y, up.z );\n\n\t\t\t}\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Reece Aaron Lecrivain / http://reecenotes.com/\n */\n\nfunction Audio( listener ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Audio';\n\n\tthis.context = listener.context;\n\n\tthis.gain = this.context.createGain();\n\tthis.gain.connect( listener.getInput() );\n\n\tthis.autoplay = false;\n\n\tthis.buffer = null;\n\tthis.loop = false;\n\tthis.startTime = 0;\n\tthis.offset = 0;\n\tthis.playbackRate = 1;\n\tthis.isPlaying = false;\n\tthis.hasPlaybackControl = true;\n\tthis.sourceType = 'empty';\n\n\tthis.filters = [];\n\n}\n\nAudio.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Audio,\n\n\tgetOutput: function () {\n\n\t\treturn this.gain;\n\n\t},\n\n\tsetNodeSource: function ( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t},\n\n\tsetMediaElementSource: function ( mediaElement ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaNode';\n\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t},\n\n\tsetBuffer: function ( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t},\n\n\tplay: function () {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar source = this.context.createBufferSource();\n\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.playbackRate.setValueAtTime( this.playbackRate, this.startTime );\n\t\tthis.startTime = this.context.currentTime;\n\t\tsource.start( this.startTime, this.offset );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\treturn this.connect();\n\n\t},\n\n\tpause: function () {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.stop();\n\t\t\tthis.offset += ( this.context.currentTime - this.startTime ) * this.playbackRate;\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tstop: function () {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.source.stop();\n\t\tthis.offset = 0;\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t},\n\n\tconnect: function () {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( var i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tdisconnect: function () {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( var i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetFilters: function () {\n\n\t\treturn this.filters;\n\n\t},\n\n\tsetFilters: function ( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value;\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetFilter: function () {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t},\n\n\tsetFilter: function ( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t},\n\n\tsetPlaybackRate: function ( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setValueAtTime( this.playbackRate, this.context.currentTime );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetPlaybackRate: function () {\n\n\t\treturn this.playbackRate;\n\n\t},\n\n\tonEnded: function () {\n\n\t\tthis.isPlaying = false;\n\n\t},\n\n\tgetLoop: function () {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t},\n\n\tsetLoop: function ( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetVolume: function () {\n\n\t\treturn this.gain.gain.value;\n\n\t},\n\n\tsetVolume: function ( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction PositionalAudio( listener ) {\n\n\tAudio.call( this, listener );\n\n\tthis.panner = this.context.createPanner();\n\tthis.panner.connect( this.gain );\n\n}\n\nPositionalAudio.prototype = Object.assign( Object.create( Audio.prototype ), {\n\n\tconstructor: PositionalAudio,\n\n\tgetOutput: function () {\n\n\t\treturn this.panner;\n\n\t},\n\n\tgetRefDistance: function () {\n\n\t\treturn this.panner.refDistance;\n\n\t},\n\n\tsetRefDistance: function ( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t\treturn this;\n\n\t},\n\n\tgetRolloffFactor: function () {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t},\n\n\tsetRolloffFactor: function ( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t\treturn this;\n\n\t},\n\n\tgetDistanceModel: function () {\n\n\t\treturn this.panner.distanceModel;\n\n\t},\n\n\tsetDistanceModel: function ( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t\treturn this;\n\n\t},\n\n\tgetMaxDistance: function () {\n\n\t\treturn this.panner.maxDistance;\n\n\t},\n\n\tsetMaxDistance: function ( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t\treturn this;\n\n\t},\n\n\tsetDirectionalCone: function ( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\treturn this;\n\n\t},\n\n\tupdateMatrixWorld: ( function () {\n\n\t\tvar position = new Vector3();\n\t\tvar quaternion = new Quaternion();\n\t\tvar scale = new Vector3();\n\n\t\tvar orientation = new Vector3();\n\n\t\treturn function updateMatrixWorld( force ) {\n\n\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\tvar panner = this.panner;\n\t\t\tthis.matrixWorld.decompose( position, quaternion, scale );\n\n\t\t\torientation.set( 0, 0, 1 ).applyQuaternion( quaternion );\n\n\t\t\tpanner.setPosition( position.x, position.y, position.z );\n\t\t\tpanner.setOrientation( orientation.x, orientation.y, orientation.z );\n\n\t\t};\n\n\t} )()\n\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AudioAnalyser( audio, fftSize ) {\n\n\tthis.analyser = audio.context.createAnalyser();\n\tthis.analyser.fftSize = fftSize !== undefined ? fftSize : 2048;\n\n\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\taudio.getOutput().connect( this.analyser );\n\n}\n\nObject.assign( AudioAnalyser.prototype, {\n\n\tgetFrequencyData: function () {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t},\n\n\tgetAverageFrequency: function () {\n\n\t\tvar value = 0, data = this.getFrequencyData();\n\n\t\tfor ( var i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n} );\n\n/**\n *\n * Buffered scene graph property that allows weighted accumulation.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction PropertyMixer( binding, typeName, valueSize ) {\n\n\tthis.binding = binding;\n\tthis.valueSize = valueSize;\n\n\tvar bufferType = Float64Array,\n\t\tmixFunction;\n\n\tswitch ( typeName ) {\n\n\t\tcase 'quaternion':\n\t\t\tmixFunction = this._slerp;\n\t\t\tbreak;\n\n\t\tcase 'string':\n\t\tcase 'bool':\n\t\t\tbufferType = Array;\n\t\t\tmixFunction = this._select;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tmixFunction = this._lerp;\n\n\t}\n\n\tthis.buffer = new bufferType( valueSize * 4 );\n\t// layout: [ incoming | accu0 | accu1 | orig ]\n\t//\n\t// interpolators can use .buffer as their .result\n\t// the data then goes to 'incoming'\n\t//\n\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t// the cumulative result and are compared to detect\n\t// changes\n\t//\n\t// 'orig' stores the original state of the property\n\n\tthis._mixBufferRegion = mixFunction;\n\n\tthis.cumulativeWeight = 0;\n\n\tthis.useCount = 0;\n\tthis.referenceCount = 0;\n\n}\n\nObject.assign( PropertyMixer.prototype, {\n\n\t// accumulate data in the 'incoming' region into 'accu<i>'\n\taccumulate: function ( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tvar buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tcurrentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tvar mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t},\n\n\t// apply the state of 'accu<i>' to the binding when accus differ\n\tapply: function ( accuIndex ) {\n\n\t\tvar stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tvar originalValueOffset = stride * 3;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tfor ( var i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t// remember the state of the bound property and copy it to both accus\n\tsaveOriginalState: function () {\n\n\t\tvar binding = this.binding;\n\n\t\tvar buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * 3;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( var i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\tthis.cumulativeWeight = 0;\n\n\t},\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState: function () {\n\n\t\tvar originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t},\n\n\n\t// mix functions\n\n\t_select: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_slerp: function ( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t},\n\n\t_lerp: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tvar s = 1 - t;\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tvar j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n *\n * A reference to a real property in the scene graph.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\n// Characters [].:/ are reserved for track binding syntax.\nvar RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\n\nfunction Composite( targetGroup, path, optionalParsedPath ) {\n\n\tvar parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\tthis._targetGroup = targetGroup;\n\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n}\n\nObject.assign( Composite.prototype, {\n\n\tgetValue: function ( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tvar firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t},\n\n\tsetValue: function ( array, offset ) {\n\n\t\tvar bindings = this._bindings;\n\n\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t},\n\n\tbind: function () {\n\n\t\tvar bindings = this._bindings;\n\n\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t},\n\n\tunbind: function () {\n\n\t\tvar bindings = this._bindings;\n\n\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n} );\n\n\nfunction PropertyBinding( rootNode, path, parsedPath ) {\n\n\tthis.path = path;\n\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode;\n\n\tthis.rootNode = rootNode;\n\n}\n\nObject.assign( PropertyBinding, {\n\n\tComposite: Composite,\n\n\tcreate: function ( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tsanitizeNodeName: ( function () {\n\n\t\tvar reservedRe = new RegExp( '[' + RESERVED_CHARS_RE + ']', 'g' );\n\n\t\treturn function sanitizeNodeName( name ) {\n\n\t\t\treturn name.replace( /\\s/g, '_' ).replace( reservedRe, '' );\n\n\t\t};\n\n\t}() ),\n\n\tparseTrackName: function () {\n\n\t\t// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n\t\t// only latin characters, and the unicode \\p{L} is not yet supported. So\n\t\t// instead, we exclude reserved characters and match everything else.\n\t\tvar wordChar = '[^' + RESERVED_CHARS_RE + ']';\n\t\tvar wordCharOrDot = '[^' + RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n\t\t// Parent directories, delimited by '/' or ':'. Currently unused, but must\n\t\t// be matched to parse the rest of the track name.\n\t\tvar directoryRe = /((?:WC+[\\/:])*)/.source.replace( 'WC', wordChar );\n\n\t\t// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\n\t\tvar nodeRe = /(WCOD+)?/.source.replace( 'WCOD', wordCharOrDot );\n\n\t\t// Object on target node, and accessor. May not contain reserved\n\t\t// characters. Accessor may contain any character except closing bracket.\n\t\tvar objectRe = /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', wordChar );\n\n\t\t// Property and accessor. May not contain reserved characters. Accessor may\n\t\t// contain any non-bracket characters.\n\t\tvar propertyRe = /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', wordChar );\n\n\t\tvar trackRe = new RegExp( ''\n\t\t\t+ '^'\n\t\t\t+ directoryRe\n\t\t\t+ nodeRe\n\t\t\t+ objectRe\n\t\t\t+ propertyRe\n\t\t\t+ '$'\n\t\t);\n\n\t\tvar supportedObjectNames = [ 'material', 'materials', 'bones' ];\n\n\t\treturn function parseTrackName( trackName ) {\n\n\t\t\tvar matches = trackRe.exec( trackName );\n\n\t\t\tif ( ! matches ) {\n\n\t\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t\t}\n\n\t\t\tvar results = {\n\t\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\t\tnodeName: matches[ 2 ],\n\t\t\t\tobjectName: matches[ 3 ],\n\t\t\t\tobjectIndex: matches[ 4 ],\n\t\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\t\tpropertyIndex: matches[ 6 ]\n\t\t\t};\n\n\t\t\tvar lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\t\tvar objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t\t// Object names must be checked against a whitelist. Otherwise, there\n\t\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t\t// include '.' characters).\n\t\t\t\tif ( supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\t\tresults.objectName = objectName;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t\t}\n\n\t\t\treturn results;\n\n\t\t};\n\n\t}(),\n\n\tfindNode: function ( root, nodeName ) {\n\n\t\tif ( ! nodeName || nodeName === \"\" || nodeName === \"root\" || nodeName === \".\" || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tvar bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tvar searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( var i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tvar childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tvar subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n} );\n\nObject.assign( PropertyBinding.prototype, { // prototype, continued\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable: function () {},\n\t_setValue_unavailable: function () {},\n\n\tBindingType: {\n\t\tDirect: 0,\n\t\tEntireArray: 1,\n\t\tArrayElement: 2,\n\t\tHasFromToArray: 3\n\t},\n\n\tVersioning: {\n\t\tNone: 0,\n\t\tNeedsUpdate: 1,\n\t\tMatrixWorldNeedsUpdate: 2\n\t},\n\n\tGetterByBindingType: [\n\n\t\tfunction getValue_direct( buffer, offset ) {\n\n\t\t\tbuffer[ offset ] = this.node[ this.propertyName ];\n\n\t\t},\n\n\t\tfunction getValue_array( buffer, offset ) {\n\n\t\t\tvar source = this.resolvedProperty;\n\n\t\t\tfor ( var i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t\t}\n\n\t\t},\n\n\t\tfunction getValue_arrayElement( buffer, offset ) {\n\n\t\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t\t},\n\n\t\tfunction getValue_toArray( buffer, offset ) {\n\n\t\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t\t}\n\n\t],\n\n\tSetterByBindingTypeAndVersioning: [\n\n\t\t[\n\t\t\t// Direct\n\n\t\t\tfunction setValue_direct( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t\t\t},\n\n\t\t\tfunction setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// EntireArray\n\n\t\t\tfunction setValue_array( buffer, offset ) {\n\n\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tfunction setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// ArrayElement\n\n\t\t\tfunction setValue_arrayElement( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t\t\t},\n\n\t\t\tfunction setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// HasToFromArray\n\n\t\t\tfunction setValue_fromArray( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t\t\t},\n\n\t\t\tfunction setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t]\n\n\t],\n\n\tgetValue: function getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t\t// Note: This class uses a State pattern on a per-method basis:\n\t\t// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n\t\t// prototype version of these methods with one that represents\n\t\t// the bound state. When the property is not found, the methods\n\t\t// become no-ops.\n\n\t},\n\n\tsetValue: function getValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t},\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind: function () {\n\n\t\tvar targetObject = this.node,\n\t\t\tparsedPath = this.parsedPath,\n\n\t\t\tobjectName = parsedPath.objectName,\n\t\t\tpropertyName = parsedPath.propertyName,\n\t\t\tpropertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode;\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\\'t found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tvar objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( var i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tvar nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tvar nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tvar versioning = this.Versioning.None;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\t\t\tthis.targetObject = targetObject;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\t\t\tthis.targetObject = targetObject;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tvar bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === \"morphTargetInfluences\" ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.geometry.isBufferGeometry ) {\n\n\t\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var i = 0; i < this.node.geometry.morphAttributes.position.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject.geometry.morphAttributes.position[ i ].name === propertyIndex ) {\n\n\t\t\t\t\t\t\tpropertyIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( ! targetObject.geometry.morphTargets ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var i = 0; i < this.node.geometry.morphTargets.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject.geometry.morphTargets[ i ].name === propertyIndex ) {\n\n\t\t\t\t\t\t\tpropertyIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t},\n\n\tunbind: function () {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n} );\n\n//!\\ DECLARE ALIAS AFTER assign prototype !\nObject.assign( PropertyBinding.prototype, {\n\n\t// initial state of these methods that calls 'bind'\n\t_getValue_unbound: PropertyBinding.prototype.getValue,\n\t_setValue_unbound: PropertyBinding.prototype.setValue,\n\n} );\n\n/**\n *\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n * \t-\tAdd objects you would otherwise pass as 'root' to the\n * \t\tconstructor or the .clipAction method of AnimationMixer.\n *\n * \t-\tInstead pass this object as 'root'.\n *\n * \t-\tYou can also add and remove objects later when the mixer\n * \t\tis running.\n *\n * Note:\n *\n * \tObjects of this class appear as one object to the mixer,\n * \tso cache control of the individual objects must be done\n * \ton the group.\n *\n * Limitation:\n *\n * \t- \tThe animated properties must be compatible among the\n * \t\tall objects in the group.\n *\n * -\tA single property can either be controlled through a\n * \ttarget group or directly, but not both.\n *\n * @author tschw\n */\n\nfunction AnimationObjectGroup() {\n\n\tthis.uuid = _Math.generateUUID();\n\n\t// cached objects followed by the active ones\n\tthis._objects = Array.prototype.slice.call( arguments );\n\n\tthis.nCachedObjects_ = 0;\t\t\t// threshold\n\t// note: read by PropertyBinding.Composite\n\n\tvar indices = {};\n\tthis._indicesByUUID = indices;\t\t// for bookkeeping\n\n\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t}\n\n\tthis._paths = [];\t\t\t\t\t// inside: string\n\tthis._parsedPaths = [];\t\t\t\t// inside: { we don't care, here }\n\tthis._bindings = []; \t\t\t\t// inside: Array< PropertyBinding >\n\tthis._bindingsIndicesByPath = {}; \t// inside: indices in these arrays\n\n\tvar scope = this;\n\n\tthis.stats = {\n\n\t\tobjects: {\n\t\t\tget total() {\n\n\t\t\t\treturn scope._objects.length;\n\n\t\t\t},\n\t\t\tget inUse() {\n\n\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t}\n\t\t},\n\t\tget bindingsPerObject() {\n\n\t\t\treturn scope._bindings.length;\n\n\t\t}\n\n\t};\n\n}\n\nObject.assign( AnimationObjectGroup.prototype, {\n\n\tisAnimationObjectGroup: true,\n\n\tadd: function () {\n\n\t\tvar objects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length,\n\t\t\tknownObject = undefined;\n\n\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tvar object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tvar firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\tremove: function () {\n\n\t\tvar objects = this._objects,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tvar object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tvar lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\t// remove & forget\n\tuncache: function () {\n\n\t\tvar objects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tvar object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tvar firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tvar lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tvar bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_: function ( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tvar indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ],\n\t\t\tbindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tvar paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( var i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tvar object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t},\n\n\tunsubscribe_: function ( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tvar indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tvar paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n *\n * Action provided by AnimationMixer for scheduling clip playback on specific\n * objects.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n *\n */\n\nfunction AnimationAction( mixer, clip, localRoot ) {\n\n\tthis._mixer = mixer;\n\tthis._clip = clip;\n\tthis._localRoot = localRoot || null;\n\n\tvar tracks = clip.tracks,\n\t\tnTracks = tracks.length,\n\t\tinterpolants = new Array( nTracks );\n\n\tvar interpolantSettings = {\n\t\tendingStart: ZeroCurvatureEnding,\n\t\tendingEnd: ZeroCurvatureEnding\n\t};\n\n\tfor ( var i = 0; i !== nTracks; ++ i ) {\n\n\t\tvar interpolant = tracks[ i ].createInterpolant( null );\n\t\tinterpolants[ i ] = interpolant;\n\t\tinterpolant.settings = interpolantSettings;\n\n\t}\n\n\tthis._interpolantSettings = interpolantSettings;\n\n\tthis._interpolants = interpolants;\t// bound by the mixer\n\n\t// inside: PropertyMixer (managed by the mixer)\n\tthis._propertyBindings = new Array( nTracks );\n\n\tthis._cacheIndex = null;\t\t\t// for the memory manager\n\tthis._byClipCacheIndex = null;\t\t// for the memory manager\n\n\tthis._timeScaleInterpolant = null;\n\tthis._weightInterpolant = null;\n\n\tthis.loop = LoopRepeat;\n\tthis._loopCount = - 1;\n\n\t// global mixer time when the action is to be started\n\t// it's set back to 'null' upon start of the action\n\tthis._startTime = null;\n\n\t// scaled local time of the action\n\t// gets clamped or wrapped to 0..clip.duration according to loop\n\tthis.time = 0;\n\n\tthis.timeScale = 1;\n\tthis._effectiveTimeScale = 1;\n\n\tthis.weight = 1;\n\tthis._effectiveWeight = 1;\n\n\tthis.repetitions = Infinity; \t\t// no. of repetitions when looping\n\n\tthis.paused = false;\t\t\t\t// true -> zero effective time scale\n\tthis.enabled = true;\t\t\t\t// false -> zero effective weight\n\n\tthis.clampWhenFinished \t= false;\t// keep feeding the last frame?\n\n\tthis.zeroSlopeAtStart \t= true;\t\t// for smooth interpolation w/o separate\n\tthis.zeroSlopeAtEnd\t\t= true;\t\t// clips for start, loop and end\n\n}\n\nObject.assign( AnimationAction.prototype, {\n\n\t// State & Scheduling\n\n\tplay: function () {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t},\n\n\tstop: function () {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t},\n\n\treset: function () {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0;\t\t\t// restart clip\n\t\tthis._loopCount = - 1;\t// forget previous loops\n\t\tthis._startTime = null;\t// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t},\n\n\tisRunning: function () {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t},\n\n\t// return true when play has been called\n\tisScheduled: function () {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t},\n\n\tstartAt: function ( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t},\n\n\tsetLoop: function ( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t},\n\n\t// Weight\n\n\t// set the weight stopping any scheduled fading\n\t// although .enabled = false yields an effective weight of zero, this\n\t// method does *not* change .enabled, because it would be confusing\n\tsetEffectiveWeight: function ( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t},\n\n\t// return the weight considering fading and .enabled\n\tgetEffectiveWeight: function () {\n\n\t\treturn this._effectiveWeight;\n\n\t},\n\n\tfadeIn: function ( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t},\n\n\tfadeOut: function ( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t},\n\n\tcrossFadeFrom: function ( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tvar fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcrossFadeTo: function ( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t},\n\n\tstopFading: function () {\n\n\t\tvar weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// Time Scale Control\n\n\t// set the time scale stopping any scheduled warping\n\t// although .paused = true yields an effective time scale of zero, this\n\t// method does *not* change .paused, because it would be confusing\n\tsetEffectiveTimeScale: function ( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t},\n\n\t// return the time scale considering warping and .paused\n\tgetEffectiveTimeScale: function () {\n\n\t\treturn this._effectiveTimeScale;\n\n\t},\n\n\tsetDuration: function ( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t},\n\n\tsyncWith: function ( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t},\n\n\thalt: function ( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t},\n\n\twarp: function ( startTimeScale, endTimeScale, duration ) {\n\n\t\tvar mixer = this._mixer, now = mixer.time,\n\t\t\tinterpolant = this._timeScaleInterpolant,\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tvar times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t},\n\n\tstopWarping: function () {\n\n\t\tvar timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// Object Accessors\n\n\tgetMixer: function () {\n\n\t\treturn this._mixer;\n\n\t},\n\n\tgetClip: function () {\n\n\t\treturn this._clip;\n\n\t},\n\n\tgetRoot: function () {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t},\n\n\t// Interna\n\n\t_update: function ( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tvar timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\treturn; // yet to come / don't decide when delta = 0\n\n\t\t\t}\n\n\t\t\t// start\n\n\t\t\tthis._startTime = null; // unschedule\n\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tvar clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tvar weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tvar interpolants = this._interpolants;\n\t\t\tvar propertyMixers = this._propertyBindings;\n\n\t\t\tfor ( var j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_updateWeight: function ( time ) {\n\n\t\tvar weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tvar interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tvar interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t},\n\n\t_updateTimeScale: function ( time ) {\n\n\t\tvar timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tvar interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tvar interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t},\n\n\t_updateTime: function ( deltaTime ) {\n\n\t\tvar time = this.time + deltaTime;\n\n\t\tif ( deltaTime === 0 ) return time;\n\n\t\tvar duration = this._clip.duration,\n\n\t\t\tloop = this.loop,\n\t\t\tloopCount = this._loopCount;\n\n\t\tif ( loop === LoopOnce ) {\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else break handle_stop;\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tvar pingPong = ( loop === LoopPingPong );\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tvar loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tvar pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tvar atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\tthis.time = time;\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.time = time;\n\t\treturn time;\n\n\t},\n\n\t_setEndings: function ( atStart, atEnd, pingPong ) {\n\n\t\tvar settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart \t= ZeroSlopeEnding;\n\t\t\tsettings.endingEnd\t\t= ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_scheduleFading: function ( duration, weightNow, weightThen ) {\n\n\t\tvar mixer = this._mixer, now = mixer.time,\n\t\t\tinterpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tvar times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now; \t\t\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n *\n * Player for AnimationClips.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction AnimationMixer( root ) {\n\n\tthis._root = root;\n\tthis._initMemoryManager();\n\tthis._accuIndex = 0;\n\n\tthis.time = 0;\n\n\tthis.timeScale = 1.0;\n\n}\n\nAnimationMixer.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: AnimationMixer,\n\n\t_bindAction: function ( action, prototypeAction ) {\n\n\t\tvar root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( var i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tvar track = tracks[ i ],\n\t\t\t\ttrackName = track.name,\n\t\t\t\tbinding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tvar path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t},\n\n\t_activateAction: function ( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tvar rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tvar bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tvar binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t},\n\n\t_deactivateAction: function ( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tvar bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tvar binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t},\n\n\t// Memory manager\n\n\t_initMemoryManager: function () {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \t\tknownActions: Array< AnimationAction >\t- used as prototypes\n\t\t// \t\tactionByRoot: AnimationAction\t\t\t- lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tvar scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t},\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction: function ( action ) {\n\n\t\tvar index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t},\n\n\t_addInactiveAction: function ( action, clipUuid, rootUuid ) {\n\n\t\tvar actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tvar knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t},\n\n\t_removeInactiveAction: function ( action ) {\n\n\t\tvar actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tvar clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tvar actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t},\n\n\t_removeInactiveBindingsForAction: function ( action ) {\n\n\t\tvar bindings = action._propertyBindings;\n\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tvar binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_lendAction: function ( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions >| inactive actions ]\n\t\t// s a\n\t\t// <-swap->\n\t\t// a s\n\n\t\tvar actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t},\n\n\t_takeBackAction: function ( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions |< inactive actions ]\n\t\t// a s\n\t\t// <-swap->\n\t\t// s a\n\n\t\tvar actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t},\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding: function ( binding, rootUuid, trackName ) {\n\n\t\tvar bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tbindings = this._bindings;\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t},\n\n\t_removeInactiveBinding: function ( binding ) {\n\n\t\tvar bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tremove_empty_map: {\n\n\t\t\tfor ( var _ in bindingByName ) break remove_empty_map; // eslint-disable-line no-unused-vars\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t},\n\n\t_lendBinding: function ( binding ) {\n\n\t\tvar bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t},\n\n\t_takeBackBinding: function ( binding ) {\n\n\t\tvar bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t},\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant: function () {\n\n\t\tvar interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++,\n\t\t\tinterpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, this._controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t},\n\n\t_takeBackControlInterpolant: function ( interpolant ) {\n\n\t\tvar interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t},\n\n\t_controlInterpolantsResultBuffer: new Float32Array( 1 ),\n\n\t// return an action for a clip optionally using a custom root target\n\t// object (this method allocates a lot of dynamic memory in case a\n\t// previously unknown clip/root combination is specified)\n\tclipAction: function ( clip, optionalRoot ) {\n\n\t\tvar root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject !== null ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ],\n\t\t\tprototypeAction = null;\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tvar existingAction =\n\t\t\t\t\tactionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tvar newAction = new AnimationAction( this, clipObject, optionalRoot );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t},\n\n\t// get an existing action\n\texistingAction: function ( clip, optionalRoot ) {\n\n\t\tvar root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\t// deactivates all previously scheduled actions\n\tstopAllAction: function () {\n\n\t\tvar actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tthis._nActiveActions = 0;\n\t\tthis._nActiveBindings = 0;\n\n\t\tfor ( var i = 0; i !== nActions; ++ i ) {\n\n\t\t\tactions[ i ].reset();\n\n\t\t}\n\n\t\tfor ( var i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].useCount = 0;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// advance the time and update apply the animation\n\tupdate: function ( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tvar actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( var i = 0; i !== nActions; ++ i ) {\n\n\t\t\tvar action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tvar bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( var i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// return this mixer's root target object\n\tgetRoot: function () {\n\n\t\treturn this._root;\n\n\t},\n\n\t// free all resources specific to a particular clip\n\tuncacheClip: function ( clip ) {\n\n\t\tvar actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tvar actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( var i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tvar action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tvar cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t},\n\n\t// free all resources specific to a particular root target object\n\tuncacheRoot: function ( root ) {\n\n\t\tvar rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( var clipUuid in actionsByClip ) {\n\n\t\t\tvar actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( var trackName in bindingByName ) {\n\n\t\t\t\tvar binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t// remove a targeted clip from the cache\n\tuncacheAction: function ( clip, optionalRoot ) {\n\n\t\tvar action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Uniform( value ) {\n\n\tif ( typeof value === 'string' ) {\n\n\t\tconsole.warn( 'THREE.Uniform: Type parameter is no longer needed.' );\n\t\tvalue = arguments[ 1 ];\n\n\t}\n\n\tthis.value = value;\n\n}\n\nUniform.prototype.clone = function () {\n\n\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n};\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InstancedBufferGeometry() {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'InstancedBufferGeometry';\n\tthis.maxInstancedCount = undefined;\n\n}\n\nInstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), {\n\n\tconstructor: InstancedBufferGeometry,\n\n\tisInstancedBufferGeometry: true,\n\n\tcopy: function ( source ) {\n\n\t\tBufferGeometry.prototype.copy.call( this, source );\n\n\t\tthis.maxInstancedCount = source.maxInstancedCount;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) {\n\n\tthis.data = interleavedBuffer;\n\tthis.itemSize = itemSize;\n\tthis.offset = offset;\n\n\tthis.normalized = normalized === true;\n\n}\n\nObject.defineProperties( InterleavedBufferAttribute.prototype, {\n\n\tcount: {\n\n\t\tget: function () {\n\n\t\t\treturn this.data.count;\n\n\t\t}\n\n\t},\n\n\tarray: {\n\n\t\tget: function () {\n\n\t\t\treturn this.data.array;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( InterleavedBufferAttribute.prototype, {\n\n\tisInterleavedBufferAttribute: true,\n\n\tsetX: function ( index, x ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( index, y ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( index, z ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetW: function ( index, w ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tgetX: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset ];\n\n\t},\n\n\tgetY: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t},\n\n\tgetZ: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t},\n\n\tgetW: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t},\n\n\tsetXY: function ( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZ: function ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InterleavedBuffer( array, stride ) {\n\n\tthis.array = array;\n\tthis.stride = stride;\n\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\tthis.dynamic = false;\n\tthis.updateRange = { offset: 0, count: - 1 };\n\n\tthis.version = 0;\n\n}\n\nObject.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( InterleavedBuffer.prototype, {\n\n\tisInterleavedBuffer: true,\n\n\tonUploadCallback: function () {},\n\n\tsetArray: function ( array ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.count = array !== undefined ? array.length / this.stride : 0;\n\t\tthis.array = array;\n\n\t\treturn this;\n\n\t},\n\n\tsetDynamic: function ( value ) {\n\n\t\tthis.dynamic = value;\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.dynamic = source.dynamic;\n\n\t\treturn this;\n\n\t},\n\n\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( var i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tset: function ( value, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tonUpload: function ( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InstancedInterleavedBuffer( array, stride, meshPerAttribute ) {\n\n\tInterleavedBuffer.call( this, array, stride );\n\n\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n}\n\nInstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), {\n\n\tconstructor: InstancedInterleavedBuffer,\n\n\tisInstancedInterleavedBuffer: true,\n\n\tcopy: function ( source ) {\n\n\t\tInterleavedBuffer.prototype.copy.call( this, source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InstancedBufferAttribute( array, itemSize, meshPerAttribute ) {\n\n\tBufferAttribute.call( this, array, itemSize );\n\n\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n}\n\nInstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), {\n\n\tconstructor: InstancedBufferAttribute,\n\n\tisInstancedBufferAttribute: true,\n\n\tcopy: function ( source ) {\n\n\t\tBufferAttribute.prototype.copy.call( this, source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author bhouston / http://clara.io/\n * @author stephomi / http://stephaneginier.com/\n */\n\nfunction Raycaster( origin, direction, near, far ) {\n\n\tthis.ray = new Ray( origin, direction );\n\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\tthis.near = near || 0;\n\tthis.far = far || Infinity;\n\n\tthis.params = {\n\t\tMesh: {},\n\t\tLine: {},\n\t\tLOD: {},\n\t\tPoints: { threshold: 1 },\n\t\tSprite: {}\n\t};\n\n\tObject.defineProperties( this.params, {\n\t\tPointCloud: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' );\n\t\t\t\treturn this.Points;\n\n\t\t\t}\n\t\t}\n\t} );\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\tif ( object.visible === false ) return;\n\n\tobject.raycast( raycaster, intersects );\n\n\tif ( recursive === true ) {\n\n\t\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\nObject.assign( Raycaster.prototype, {\n\n\tlinePrecision: 1,\n\n\tset: function ( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t},\n\n\tsetFromCamera: function ( coords, camera ) {\n\n\t\tif ( ( camera && camera.isPerspectiveCamera ) ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\n\t\t} else if ( ( camera && camera.isOrthographicCamera ) ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type.' );\n\n\t\t}\n\n\t},\n\n\tintersectObject: function ( object, recursive, optionalTarget ) {\n\n\t\tvar intersects = optionalTarget || [];\n\n\t\tintersectObject( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t},\n\n\tintersectObjects: function ( objects, recursive, optionalTarget ) {\n\n\t\tvar intersects = optionalTarget || [];\n\n\t\tif ( Array.isArray( objects ) === false ) {\n\n\t\t\tconsole.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' );\n\t\t\treturn intersects;\n\n\t\t}\n\n\t\tfor ( var i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Clock( autoStart ) {\n\n\tthis.autoStart = ( autoStart !== undefined ) ? autoStart : true;\n\n\tthis.startTime = 0;\n\tthis.oldTime = 0;\n\tthis.elapsedTime = 0;\n\n\tthis.running = false;\n\n}\n\nObject.assign( Clock.prototype, {\n\n\tstart: function () {\n\n\t\tthis.startTime = ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t},\n\n\tstop: function () {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t},\n\n\tgetElapsedTime: function () {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t},\n\n\tgetDelta: function () {\n\n\t\tvar diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tvar newTime = ( typeof performance === 'undefined' ? Date : performance ).now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n *\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * The poles (phi) are at the positive and negative y axis.\n * The equator starts at positive z.\n */\n\nfunction Spherical( radius, phi, theta ) {\n\n\tthis.radius = ( radius !== undefined ) ? radius : 1.0;\n\tthis.phi = ( phi !== undefined ) ? phi : 0; // up / down towards top and bottom pole\n\tthis.theta = ( theta !== undefined ) ? theta : 0; // around the equator of the sphere\n\n\treturn this;\n\n}\n\nObject.assign( Spherical.prototype, {\n\n\tset: function ( radius, phi, theta ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi;\n\t\tthis.theta = theta;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.phi = other.phi;\n\t\tthis.theta = other.theta;\n\n\t\treturn this;\n\n\t},\n\n\t// restrict phi to be betwee EPS and PI-EPS\n\tmakeSafe: function () {\n\n\t\tvar EPS = 0.000001;\n\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromVector3: function ( vec3 ) {\n\n\t\tthis.radius = vec3.length();\n\n\t\tif ( this.radius === 0 ) {\n\n\t\t\tthis.theta = 0;\n\t\t\tthis.phi = 0;\n\n\t\t} else {\n\n\t\t\tthis.theta = Math.atan2( vec3.x, vec3.z ); // equator angle around y-up axis\n\t\t\tthis.phi = Math.acos( _Math.clamp( vec3.y / this.radius, - 1, 1 ) ); // polar angle\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n *\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n *\n */\n\nfunction Cylindrical( radius, theta, y ) {\n\n\tthis.radius = ( radius !== undefined ) ? radius : 1.0; // distance from the origin to a point in the x-z plane\n\tthis.theta = ( theta !== undefined ) ? theta : 0; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\tthis.y = ( y !== undefined ) ? y : 0; // height above the x-z plane\n\n\treturn this;\n\n}\n\nObject.assign( Cylindrical.prototype, {\n\n\tset: function ( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromVector3: function ( vec3 ) {\n\n\t\tthis.radius = Math.sqrt( vec3.x * vec3.x + vec3.z * vec3.z );\n\t\tthis.theta = Math.atan2( vec3.x, vec3.z );\n\t\tthis.y = vec3.y;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Box2( min, max ) {\n\n\tthis.min = ( min !== undefined ) ? min : new Vector2( + Infinity, + Infinity );\n\tthis.max = ( max !== undefined ) ? max : new Vector2( - Infinity, - Infinity );\n\n}\n\nObject.assign( Box2.prototype, {\n\n\tset: function ( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCenterAndSize: function () {\n\n\t\tvar v1 = new Vector2();\n\n\t\treturn function setFromCenterAndSize( center, size ) {\n\n\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\n\t\t\tthis.min.copy( center ).sub( halfSize );\n\t\t\tthis.max.copy( center ).add( halfSize );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tmakeEmpty: function () {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t},\n\n\tisEmpty: function () {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t},\n\n\tgetCenter: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getCenter() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t},\n\n\tgetSize: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getSize() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t},\n\n\texpandByPoint: function ( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t},\n\n\texpandByVector: function ( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t},\n\n\texpandByScalar: function ( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t},\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ? false : true;\n\n\t},\n\n\tcontainsBox: function ( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t},\n\n\tgetParameter: function ( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getParameter() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ? false : true;\n\n\t},\n\n\tclampPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t},\n\n\tdistanceToPoint: function () {\n\n\t\tvar v1 = new Vector2();\n\n\t\treturn function distanceToPoint( point ) {\n\n\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\n\t\t\treturn clampedPoint.sub( point ).length();\n\n\t\t};\n\n\t}(),\n\n\tintersect: function ( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tunion: function ( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction ImmediateRenderObject( material ) {\n\n\tObject3D.call( this );\n\n\tthis.material = material;\n\tthis.render = function ( /* renderCallback */ ) {};\n\n}\n\nImmediateRenderObject.prototype = Object.create( Object3D.prototype );\nImmediateRenderObject.prototype.constructor = ImmediateRenderObject;\n\nImmediateRenderObject.prototype.isImmediateRenderObject = true;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction VertexNormalsHelper( object, size, hex, linewidth ) {\n\n\tthis.object = object;\n\n\tthis.size = ( size !== undefined ) ? size : 1;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xff0000;\n\n\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\n\n\t//\n\n\tvar nNormals = 0;\n\n\tvar objGeometry = this.object.geometry;\n\n\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\tnNormals = objGeometry.faces.length * 3;\n\n\t} else if ( objGeometry && objGeometry.isBufferGeometry ) {\n\n\t\tnNormals = objGeometry.attributes.normal.count;\n\n\t}\n\n\t//\n\n\tvar geometry = new BufferGeometry();\n\n\tvar positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 );\n\n\tgeometry.addAttribute( 'position', positions );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) );\n\n\t//\n\n\tthis.matrixAutoUpdate = false;\n\n\tthis.update();\n\n}\n\nVertexNormalsHelper.prototype = Object.create( LineSegments.prototype );\nVertexNormalsHelper.prototype.constructor = VertexNormalsHelper;\n\nVertexNormalsHelper.prototype.update = ( function () {\n\n\tvar v1 = new Vector3();\n\tvar v2 = new Vector3();\n\tvar normalMatrix = new Matrix3();\n\n\treturn function update() {\n\n\t\tvar keys = [ 'a', 'b', 'c' ];\n\n\t\tthis.object.updateMatrixWorld( true );\n\n\t\tnormalMatrix.getNormalMatrix( this.object.matrixWorld );\n\n\t\tvar matrixWorld = this.object.matrixWorld;\n\n\t\tvar position = this.geometry.attributes.position;\n\n\t\t//\n\n\t\tvar objGeometry = this.object.geometry;\n\n\t\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\t\tvar vertices = objGeometry.vertices;\n\n\t\t\tvar faces = objGeometry.faces;\n\n\t\t\tvar idx = 0;\n\n\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar vertex = vertices[ face[ keys[ j ] ] ];\n\n\t\t\t\t\tvar normal = face.vertexNormals[ j ];\n\n\t\t\t\t\tv1.copy( vertex ).applyMatrix4( matrixWorld );\n\n\t\t\t\t\tv2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( objGeometry && objGeometry.isBufferGeometry ) {\n\n\t\t\tvar objPos = objGeometry.attributes.position;\n\n\t\t\tvar objNorm = objGeometry.attributes.normal;\n\n\t\t\tvar idx = 0;\n\n\t\t\t// for simplicity, ignore index and drawcalls, and render every normal\n\n\t\t\tfor ( var j = 0, jl = objPos.count; j < jl; j ++ ) {\n\n\t\t\t\tv1.set( objPos.getX( j ), objPos.getY( j ), objPos.getZ( j ) ).applyMatrix4( matrixWorld );\n\n\t\t\t\tv2.set( objNorm.getX( j ), objNorm.getY( j ), objNorm.getZ( j ) );\n\n\t\t\t\tv2.applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tposition.needsUpdate = true;\n\n\t};\n\n}() );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction SpotLightHelper( light, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tvar geometry = new BufferGeometry();\n\n\tvar positions = [\n\t\t0, 0, 0, \t0, 0, 1,\n\t\t0, 0, 0, \t1, 0, 1,\n\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t0, 0, 0, \t0, 1, 1,\n\t\t0, 0, 0, \t0, - 1, 1\n\t];\n\n\tfor ( var i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\tvar p1 = ( i / l ) * Math.PI * 2;\n\t\tvar p2 = ( j / l ) * Math.PI * 2;\n\n\t\tpositions.push(\n\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t);\n\n\t}\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\tvar material = new LineBasicMaterial( { fog: false } );\n\n\tthis.cone = new LineSegments( geometry, material );\n\tthis.add( this.cone );\n\n\tthis.update();\n\n}\n\nSpotLightHelper.prototype = Object.create( Object3D.prototype );\nSpotLightHelper.prototype.constructor = SpotLightHelper;\n\nSpotLightHelper.prototype.dispose = function () {\n\n\tthis.cone.geometry.dispose();\n\tthis.cone.material.dispose();\n\n};\n\nSpotLightHelper.prototype.update = function () {\n\n\tvar vector = new Vector3();\n\tvar vector2 = new Vector3();\n\n\treturn function update() {\n\n\t\tthis.light.updateMatrixWorld();\n\n\t\tvar coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tvar coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\tvector.setFromMatrixPosition( this.light.matrixWorld );\n\t\tvector2.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( vector2.sub( vector ) );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t};\n\n}();\n\n/**\n * @author Sean Griffin / http://twitter.com/sgrif\n * @author Michael Guerrero / http://realitymeltdown.com\n * @author mrdoob / http://mrdoob.com/\n * @author ikerr / http://verold.com\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction getBoneList( object ) {\n\n\tvar boneList = [];\n\n\tif ( object && object.isBone ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( var i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\nfunction SkeletonHelper( object ) {\n\n\tvar bones = getBoneList( object );\n\n\tvar geometry = new BufferGeometry();\n\n\tvar vertices = [];\n\tvar colors = [];\n\n\tvar color1 = new Color( 0, 0, 1 );\n\tvar color2 = new Color( 0, 1, 0 );\n\n\tfor ( var i = 0; i < bones.length; i ++ ) {\n\n\t\tvar bone = bones[ i ];\n\n\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t}\n\n\t}\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors, depthTest: false, depthWrite: false, transparent: true } );\n\n\tLineSegments.call( this, geometry, material );\n\n\tthis.root = object;\n\tthis.bones = bones;\n\n\tthis.matrix = object.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n}\n\nSkeletonHelper.prototype = Object.create( LineSegments.prototype );\nSkeletonHelper.prototype.constructor = SkeletonHelper;\n\nSkeletonHelper.prototype.updateMatrixWorld = function () {\n\n\tvar vector = new Vector3();\n\n\tvar boneMatrix = new Matrix4();\n\tvar matrixWorldInv = new Matrix4();\n\n\treturn function updateMatrixWorld( force ) {\n\n\t\tvar bones = this.bones;\n\n\t\tvar geometry = this.geometry;\n\t\tvar position = geometry.getAttribute( 'position' );\n\n\t\tmatrixWorldInv.getInverse( this.root.matrixWorld );\n\n\t\tfor ( var i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tvar bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.matrixWorld );\n\t\t\t\tvector.setFromMatrixPosition( boneMatrix );\n\t\t\t\tposition.setXYZ( j, vector.x, vector.y, vector.z );\n\n\t\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\tvector.setFromMatrixPosition( boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, vector.x, vector.y, vector.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t};\n\n}();\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction PointLightHelper( light, sphereSize, color ) {\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.color = color;\n\n\tvar geometry = new SphereBufferGeometry( sphereSize, 4, 2 );\n\tvar material = new MeshBasicMaterial( { wireframe: true, fog: false } );\n\n\tMesh.call( this, geometry, material );\n\n\tthis.matrix = this.light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.update();\n\n\n\t/*\n\tvar distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 );\n\tvar distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tvar d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n}\n\nPointLightHelper.prototype = Object.create( Mesh.prototype );\nPointLightHelper.prototype.constructor = PointLightHelper;\n\nPointLightHelper.prototype.dispose = function () {\n\n\tthis.geometry.dispose();\n\tthis.material.dispose();\n\n};\n\nPointLightHelper.prototype.update = function () {\n\n\tif ( this.color !== undefined ) {\n\n\t\tthis.material.color.set( this.color );\n\n\t} else {\n\n\t\tthis.material.color.copy( this.light.color );\n\n\t}\n\n\t/*\n\tvar d = this.light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.visible = true;\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\t*/\n\n};\n\n/**\n * @author abelnation / http://github.com/abelnation\n * @author Mugen87 / http://github.com/Mugen87\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction RectAreaLightHelper( light, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tvar material = new LineBasicMaterial( { fog: false } );\n\n\tvar geometry = new BufferGeometry();\n\n\tgeometry.addAttribute( 'position', new BufferAttribute( new Float32Array( 5 * 3 ), 3 ) );\n\n\tthis.line = new Line( geometry, material );\n\tthis.add( this.line );\n\n\n\tthis.update();\n\n}\n\nRectAreaLightHelper.prototype = Object.create( Object3D.prototype );\nRectAreaLightHelper.prototype.constructor = RectAreaLightHelper;\n\nRectAreaLightHelper.prototype.dispose = function () {\n\n\tthis.children[ 0 ].geometry.dispose();\n\tthis.children[ 0 ].material.dispose();\n\n};\n\nRectAreaLightHelper.prototype.update = function () {\n\n\t// calculate new dimensions of the helper\n\n\tvar hx = this.light.width * 0.5;\n\tvar hy = this.light.height * 0.5;\n\n\tvar position = this.line.geometry.attributes.position;\n\tvar array = position.array;\n\n\t// update vertices\n\n\tarray[ 0 ] = hx; array[ 1 ] = - hy; array[ 2 ] = 0;\n\tarray[ 3 ] = hx; array[ 4 ] = hy; array[ 5 ] = 0;\n\tarray[ 6 ] = - hx; array[ 7 ] = hy; array[ 8 ] = 0;\n\tarray[ 9 ] = - hx; array[ 10 ] = - hy; array[ 11 ] = 0;\n\tarray[ 12 ] = hx; array[ 13 ] = - hy; array[ 14 ] = 0;\n\n\tposition.needsUpdate = true;\n\n\tif ( this.color !== undefined ) {\n\n\t\tthis.line.material.color.set( this.color );\n\n\t} else {\n\n\t\tthis.line.material.color.copy( this.light.color );\n\n\t}\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction HemisphereLightHelper( light, size, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tvar geometry = new OctahedronBufferGeometry( size );\n\tgeometry.rotateY( Math.PI * 0.5 );\n\n\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false } );\n\tif ( this.color === undefined ) this.material.vertexColors = VertexColors;\n\n\tvar position = geometry.getAttribute( 'position' );\n\tvar colors = new Float32Array( position.count * 3 );\n\n\tgeometry.addAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\tthis.add( new Mesh( geometry, this.material ) );\n\n\tthis.update();\n\n}\n\nHemisphereLightHelper.prototype = Object.create( Object3D.prototype );\nHemisphereLightHelper.prototype.constructor = HemisphereLightHelper;\n\nHemisphereLightHelper.prototype.dispose = function () {\n\n\tthis.children[ 0 ].geometry.dispose();\n\tthis.children[ 0 ].material.dispose();\n\n};\n\nHemisphereLightHelper.prototype.update = function () {\n\n\tvar vector = new Vector3();\n\n\tvar color1 = new Color();\n\tvar color2 = new Color();\n\n\treturn function update() {\n\n\t\tvar mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tvar colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\tcolor1.copy( this.light.color );\n\t\t\tcolor2.copy( this.light.groundColor );\n\n\t\t\tfor ( var i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tvar color = ( i < ( l / 2 ) ) ? color1 : color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tmesh.lookAt( vector.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t};\n\n}();\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction GridHelper( size, divisions, color1, color2 ) {\n\n\tsize = size || 10;\n\tdivisions = divisions || 10;\n\tcolor1 = new Color( color1 !== undefined ? color1 : 0x444444 );\n\tcolor2 = new Color( color2 !== undefined ? color2 : 0x888888 );\n\n\tvar center = divisions / 2;\n\tvar step = size / divisions;\n\tvar halfSize = size / 2;\n\n\tvar vertices = [], colors = [];\n\n\tfor ( var i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\tvar color = i === center ? color1 : color2;\n\n\t\tcolor.toArray( colors, j ); j += 3;\n\t\tcolor.toArray( colors, j ); j += 3;\n\t\tcolor.toArray( colors, j ); j += 3;\n\t\tcolor.toArray( colors, j ); j += 3;\n\n\t}\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\tLineSegments.call( this, geometry, material );\n\n}\n\nGridHelper.prototype = Object.create( LineSegments.prototype );\nGridHelper.prototype.constructor = GridHelper;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / http://github.com/Mugen87\n * @author Hectate / http://www.github.com/Hectate\n */\n\nfunction PolarGridHelper( radius, radials, circles, divisions, color1, color2 ) {\n\n\tradius = radius || 10;\n\tradials = radials || 16;\n\tcircles = circles || 8;\n\tdivisions = divisions || 64;\n\tcolor1 = new Color( color1 !== undefined ? color1 : 0x444444 );\n\tcolor2 = new Color( color2 !== undefined ? color2 : 0x888888 );\n\n\tvar vertices = [];\n\tvar colors = [];\n\n\tvar x, z;\n\tvar v, i, j, r, color;\n\n\t// create the radials\n\n\tfor ( i = 0; i <= radials; i ++ ) {\n\n\t\tv = ( i / radials ) * ( Math.PI * 2 );\n\n\t\tx = Math.sin( v ) * radius;\n\t\tz = Math.cos( v ) * radius;\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tvertices.push( x, 0, z );\n\n\t\tcolor = ( i & 1 ) ? color1 : color2;\n\n\t\tcolors.push( color.r, color.g, color.b );\n\t\tcolors.push( color.r, color.g, color.b );\n\n\t}\n\n\t// create the circles\n\n\tfor ( i = 0; i <= circles; i ++ ) {\n\n\t\tcolor = ( i & 1 ) ? color1 : color2;\n\n\t\tr = radius - ( radius / circles * i );\n\n\t\tfor ( j = 0; j < divisions; j ++ ) {\n\n\t\t\t// first vertex\n\n\t\t\tv = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\tx = Math.sin( v ) * r;\n\t\t\tz = Math.cos( v ) * r;\n\n\t\t\tvertices.push( x, 0, z );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t// second vertex\n\n\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\tx = Math.sin( v ) * r;\n\t\t\tz = Math.cos( v ) * r;\n\n\t\t\tvertices.push( x, 0, z );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t}\n\n\t}\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\tLineSegments.call( this, geometry, material );\n\n}\n\nPolarGridHelper.prototype = Object.create( LineSegments.prototype );\nPolarGridHelper.prototype.constructor = PolarGridHelper;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction FaceNormalsHelper( object, size, hex, linewidth ) {\n\n\t// FaceNormalsHelper only supports THREE.Geometry\n\n\tthis.object = object;\n\n\tthis.size = ( size !== undefined ) ? size : 1;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\n\n\t//\n\n\tvar nNormals = 0;\n\n\tvar objGeometry = this.object.geometry;\n\n\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\tnNormals = objGeometry.faces.length;\n\n\t} else {\n\n\t\tconsole.warn( 'THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.' );\n\n\t}\n\n\t//\n\n\tvar geometry = new BufferGeometry();\n\n\tvar positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 );\n\n\tgeometry.addAttribute( 'position', positions );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) );\n\n\t//\n\n\tthis.matrixAutoUpdate = false;\n\tthis.update();\n\n}\n\nFaceNormalsHelper.prototype = Object.create( LineSegments.prototype );\nFaceNormalsHelper.prototype.constructor = FaceNormalsHelper;\n\nFaceNormalsHelper.prototype.update = ( function () {\n\n\tvar v1 = new Vector3();\n\tvar v2 = new Vector3();\n\tvar normalMatrix = new Matrix3();\n\n\treturn function update() {\n\n\t\tthis.object.updateMatrixWorld( true );\n\n\t\tnormalMatrix.getNormalMatrix( this.object.matrixWorld );\n\n\t\tvar matrixWorld = this.object.matrixWorld;\n\n\t\tvar position = this.geometry.attributes.position;\n\n\t\t//\n\n\t\tvar objGeometry = this.object.geometry;\n\n\t\tvar vertices = objGeometry.vertices;\n\n\t\tvar faces = objGeometry.faces;\n\n\t\tvar idx = 0;\n\n\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tvar normal = face.normal;\n\n\t\t\tv1.copy( vertices[ face.a ] )\n\t\t\t\t.add( vertices[ face.b ] )\n\t\t\t\t.add( vertices[ face.c ] )\n\t\t\t\t.divideScalar( 3 )\n\t\t\t\t.applyMatrix4( matrixWorld );\n\n\t\t\tv2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\tidx = idx + 1;\n\n\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\tidx = idx + 1;\n\n\t\t}\n\n\t\tposition.needsUpdate = true;\n\n\t};\n\n}() );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction DirectionalLightHelper( light, size, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tif ( size === undefined ) size = 1;\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( [\n\t\t- size, size, 0,\n\t\tsize, size, 0,\n\t\tsize, - size, 0,\n\t\t- size, - size, 0,\n\t\t- size, size, 0\n\t], 3 ) );\n\n\tvar material = new LineBasicMaterial( { fog: false } );\n\n\tthis.lightPlane = new Line( geometry, material );\n\tthis.add( this.lightPlane );\n\n\tgeometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\tthis.targetLine = new Line( geometry, material );\n\tthis.add( this.targetLine );\n\n\tthis.update();\n\n}\n\nDirectionalLightHelper.prototype = Object.create( Object3D.prototype );\nDirectionalLightHelper.prototype.constructor = DirectionalLightHelper;\n\nDirectionalLightHelper.prototype.dispose = function () {\n\n\tthis.lightPlane.geometry.dispose();\n\tthis.lightPlane.material.dispose();\n\tthis.targetLine.geometry.dispose();\n\tthis.targetLine.material.dispose();\n\n};\n\nDirectionalLightHelper.prototype.update = function () {\n\n\tvar v1 = new Vector3();\n\tvar v2 = new Vector3();\n\tvar v3 = new Vector3();\n\n\treturn function update() {\n\n\t\tv1.setFromMatrixPosition( this.light.matrixWorld );\n\t\tv2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\tv3.subVectors( v2, v1 );\n\n\t\tthis.lightPlane.lookAt( v3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( v3 );\n\t\tthis.targetLine.scale.z = v3.length();\n\n\t};\n\n}();\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author Mugen87 / https://github.com/Mugen87\n *\n *\t- shows frustum, line of sight and up of the camera\n *\t- suitable for fast updates\n * \t- based on frustum visualization in lightgl.js shadowmap example\n *\t\thttp://evanw.github.com/lightgl.js/tests/shadowmap.html\n */\n\nfunction CameraHelper( camera ) {\n\n\tvar geometry = new BufferGeometry();\n\tvar material = new LineBasicMaterial( { color: 0xffffff, vertexColors: FaceColors } );\n\n\tvar vertices = [];\n\tvar colors = [];\n\n\tvar pointMap = {};\n\n\t// colors\n\n\tvar colorFrustum = new Color( 0xffaa00 );\n\tvar colorCone = new Color( 0xff0000 );\n\tvar colorUp = new Color( 0x00aaff );\n\tvar colorTarget = new Color( 0xffffff );\n\tvar colorCross = new Color( 0x333333 );\n\n\t// near\n\n\taddLine( 'n1', 'n2', colorFrustum );\n\taddLine( 'n2', 'n4', colorFrustum );\n\taddLine( 'n4', 'n3', colorFrustum );\n\taddLine( 'n3', 'n1', colorFrustum );\n\n\t// far\n\n\taddLine( 'f1', 'f2', colorFrustum );\n\taddLine( 'f2', 'f4', colorFrustum );\n\taddLine( 'f4', 'f3', colorFrustum );\n\taddLine( 'f3', 'f1', colorFrustum );\n\n\t// sides\n\n\taddLine( 'n1', 'f1', colorFrustum );\n\taddLine( 'n2', 'f2', colorFrustum );\n\taddLine( 'n3', 'f3', colorFrustum );\n\taddLine( 'n4', 'f4', colorFrustum );\n\n\t// cone\n\n\taddLine( 'p', 'n1', colorCone );\n\taddLine( 'p', 'n2', colorCone );\n\taddLine( 'p', 'n3', colorCone );\n\taddLine( 'p', 'n4', colorCone );\n\n\t// up\n\n\taddLine( 'u1', 'u2', colorUp );\n\taddLine( 'u2', 'u3', colorUp );\n\taddLine( 'u3', 'u1', colorUp );\n\n\t// target\n\n\taddLine( 'c', 't', colorTarget );\n\taddLine( 'p', 'c', colorCross );\n\n\t// cross\n\n\taddLine( 'cn1', 'cn2', colorCross );\n\taddLine( 'cn3', 'cn4', colorCross );\n\n\taddLine( 'cf1', 'cf2', colorCross );\n\taddLine( 'cf3', 'cf4', colorCross );\n\n\tfunction addLine( a, b, color ) {\n\n\t\taddPoint( a, color );\n\t\taddPoint( b, color );\n\n\t}\n\n\tfunction addPoint( id, color ) {\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tcolors.push( color.r, color.g, color.b );\n\n\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\tpointMap[ id ] = [];\n\n\t\t}\n\n\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t}\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tLineSegments.call( this, geometry, material );\n\n\tthis.camera = camera;\n\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\tthis.matrix = camera.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.pointMap = pointMap;\n\n\tthis.update();\n\n}\n\nCameraHelper.prototype = Object.create( LineSegments.prototype );\nCameraHelper.prototype.constructor = CameraHelper;\n\nCameraHelper.prototype.update = function () {\n\n\tvar geometry, pointMap;\n\n\tvar vector = new Vector3();\n\tvar camera = new Camera();\n\n\tfunction setPoint( point, x, y, z ) {\n\n\t\tvector.set( x, y, z ).unproject( camera );\n\n\t\tvar points = pointMap[ point ];\n\n\t\tif ( points !== undefined ) {\n\n\t\t\tvar position = geometry.getAttribute( 'position' );\n\n\t\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tposition.setXYZ( points[ i ], vector.x, vector.y, vector.z );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn function update() {\n\n\t\tgeometry = this.geometry;\n\t\tpointMap = this.pointMap;\n\n\t\tvar w = 1, h = 1;\n\n\t\t// we need just camera projection matrix\n\t\t// world matrix must be identity\n\n\t\tcamera.projectionMatrix.copy( this.camera.projectionMatrix );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', 0, 0, - 1 );\n\t\tsetPoint( 't', 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', - w, - h, - 1 );\n\t\tsetPoint( 'n2', w, - h, - 1 );\n\t\tsetPoint( 'n3', - w, h, - 1 );\n\t\tsetPoint( 'n4', w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', - w, - h, 1 );\n\t\tsetPoint( 'f2', w, - h, 1 );\n\t\tsetPoint( 'f3', - w, h, 1 );\n\t\tsetPoint( 'f4', w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', - w, 0, 1 );\n\t\tsetPoint( 'cf2', w, 0, 1 );\n\t\tsetPoint( 'cf3', 0, - h, 1 );\n\t\tsetPoint( 'cf4', 0, h, 1 );\n\n\t\tsetPoint( 'cn1', - w, 0, - 1 );\n\t\tsetPoint( 'cn2', w, 0, - 1 );\n\t\tsetPoint( 'cn3', 0, - h, - 1 );\n\t\tsetPoint( 'cn4', 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t};\n\n}();\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / http://github.com/Mugen87\n */\n\nfunction BoxHelper( object, color ) {\n\n\tthis.object = object;\n\n\tif ( color === undefined ) color = 0xffff00;\n\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 ] );\n\tvar positions = new Float32Array( 8 * 3 );\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\tgeometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\tthis.matrixAutoUpdate = false;\n\n\tthis.update();\n\n}\n\nBoxHelper.prototype = Object.create( LineSegments.prototype );\nBoxHelper.prototype.constructor = BoxHelper;\n\nBoxHelper.prototype.update = ( function () {\n\n\tvar box = new Box3();\n\n\treturn function update( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\tbox.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tvar min = box.min;\n\t\tvar max = box.max;\n\n\t\t/*\n\t\t 5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tvar position = this.geometry.attributes.position;\n\t\tvar array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t};\n\n} )();\n\nBoxHelper.prototype.setFromObject = function ( object ) {\n\n\tthis.object = object;\n\tthis.update();\n\n\treturn this;\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Box3Helper( box, hex ) {\n\n\tthis.type = 'Box3Helper';\n\n\tthis.box = box;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\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 ] );\n\n\tvar positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\tvar geometry = new BufferGeometry();\n\n\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\tthis.geometry.computeBoundingSphere();\n\n}\n\nBox3Helper.prototype = Object.create( LineSegments.prototype );\nBox3Helper.prototype.constructor = Box3Helper;\n\nBox3Helper.prototype.updateMatrixWorld = function ( force ) {\n\n\tvar box = this.box;\n\n\tif ( box.isEmpty() ) return;\n\n\tbox.getCenter( this.position );\n\n\tbox.getSize( this.scale );\n\n\tthis.scale.multiplyScalar( 0.5 );\n\n\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction PlaneHelper( plane, size, hex ) {\n\n\tthis.type = 'PlaneHelper';\n\n\tthis.plane = plane;\n\n\tthis.size = ( size === undefined ) ? 1 : size;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\tvar positions = [ 1, - 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 ];\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\tgeometry.computeBoundingSphere();\n\n\tLine.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\t//\n\n\tvar positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ];\n\n\tvar geometry2 = new BufferGeometry();\n\tgeometry2.addAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\tgeometry2.computeBoundingSphere();\n\n\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false } ) ) );\n\n}\n\nPlaneHelper.prototype = Object.create( Line.prototype );\nPlaneHelper.prototype.constructor = PlaneHelper;\n\nPlaneHelper.prototype.updateMatrixWorld = function ( force ) {\n\n\tvar scale = - this.plane.constant;\n\n\tif ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter\n\n\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, scale );\n\n\tthis.children[ 0 ].material.side = ( scale < 0 ) ? BackSide : FrontSide; // renderer flips side when determinant < 0; flipping not wanted here\n\n\tthis.lookAt( this.plane.normal );\n\n\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n * @author zz85 / http://github.com/zz85\n * @author bhouston / http://clara.io\n *\n * Creates an arrow for visualizing directions\n *\n * Parameters:\n * dir - Vector3\n * origin - Vector3\n * length - Number\n * color - color in hex value\n * headLength - Number\n * headWidth - Number\n */\n\nvar lineGeometry, coneGeometry;\n\nfunction ArrowHelper( dir, origin, length, color, headLength, headWidth ) {\n\n\t// dir is assumed to be normalized\n\n\tObject3D.call( this );\n\n\tif ( color === undefined ) color = 0xffff00;\n\tif ( length === undefined ) length = 1;\n\tif ( headLength === undefined ) headLength = 0.2 * length;\n\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\tif ( lineGeometry === undefined ) {\n\n\t\tlineGeometry = new BufferGeometry();\n\t\tlineGeometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\tconeGeometry = new CylinderBufferGeometry( 0, 0.5, 1, 5, 1 );\n\t\tconeGeometry.translate( 0, - 0.5, 0 );\n\n\t}\n\n\tthis.position.copy( origin );\n\n\tthis.line = new Line( lineGeometry, new LineBasicMaterial( { color: color } ) );\n\tthis.line.matrixAutoUpdate = false;\n\tthis.add( this.line );\n\n\tthis.cone = new Mesh( coneGeometry, new MeshBasicMaterial( { color: color } ) );\n\tthis.cone.matrixAutoUpdate = false;\n\tthis.add( this.cone );\n\n\tthis.setDirection( dir );\n\tthis.setLength( length, headLength, headWidth );\n\n}\n\nArrowHelper.prototype = Object.create( Object3D.prototype );\nArrowHelper.prototype.constructor = ArrowHelper;\n\nArrowHelper.prototype.setDirection = ( function () {\n\n\tvar axis = new Vector3();\n\tvar radians;\n\n\treturn function setDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\taxis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tradians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( axis, radians );\n\n\t\t}\n\n\t};\n\n}() );\n\nArrowHelper.prototype.setLength = function ( length, headLength, headWidth ) {\n\n\tif ( headLength === undefined ) headLength = 0.2 * length;\n\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\tthis.line.scale.set( 1, Math.max( 0, length - headLength ), 1 );\n\tthis.line.updateMatrix();\n\n\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\tthis.cone.position.y = length;\n\tthis.cone.updateMatrix();\n\n};\n\nArrowHelper.prototype.setColor = function ( color ) {\n\n\tthis.line.material.color.copy( color );\n\tthis.cone.material.color.copy( color );\n\n};\n\n/**\n * @author sroucheray / http://sroucheray.org/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AxesHelper( size ) {\n\n\tsize = size || 1;\n\n\tvar vertices = [\n\t\t0, 0, 0,\tsize, 0, 0,\n\t\t0, 0, 0,\t0, size, 0,\n\t\t0, 0, 0,\t0, 0, size\n\t];\n\n\tvar colors = [\n\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t0, 0, 1,\t0, 0.6, 1\n\t];\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\tLineSegments.call( this, geometry, material );\n\n}\n\nAxesHelper.prototype = Object.create( LineSegments.prototype );\nAxesHelper.prototype.constructor = AxesHelper;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Face4( a, b, c, d, normal, color, materialIndex ) {\n\n\tconsole.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' );\n\treturn new Face3( a, b, c, normal, color, materialIndex );\n\n}\n\nvar LineStrip = 0;\n\nvar LinePieces = 1;\n\nfunction MeshFaceMaterial( materials ) {\n\n\tconsole.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' );\n\treturn materials;\n\n}\n\nfunction MultiMaterial( materials ) {\n\n\tif ( materials === undefined ) materials = [];\n\n\tconsole.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' );\n\tmaterials.isMultiMaterial = true;\n\tmaterials.materials = materials;\n\tmaterials.clone = function () {\n\n\t\treturn materials.slice();\n\n\t};\n\treturn materials;\n\n}\n\nfunction PointCloud( geometry, material ) {\n\n\tconsole.warn( 'THREE.PointCloud has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction Particle( material ) {\n\n\tconsole.warn( 'THREE.Particle has been renamed to THREE.Sprite.' );\n\treturn new Sprite( material );\n\n}\n\nfunction ParticleSystem( geometry, material ) {\n\n\tconsole.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction PointCloudMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleBasicMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleSystemMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction Vertex( x, y, z ) {\n\n\tconsole.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' );\n\treturn new Vector3( x, y, z );\n\n}\n\n//\n\nfunction DynamicBufferAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.' );\n\treturn new BufferAttribute( array, itemSize ).setDynamic( true );\n\n}\n\nfunction Int8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' );\n\treturn new Int8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' );\n\treturn new Uint8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8ClampedAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' );\n\treturn new Uint8ClampedBufferAttribute( array, itemSize );\n\n}\n\nfunction Int16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' );\n\treturn new Int16BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' );\n\treturn new Uint16BufferAttribute( array, itemSize );\n\n}\n\nfunction Int32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' );\n\treturn new Int32BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' );\n\treturn new Uint32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' );\n\treturn new Float32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float64Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' );\n\treturn new Float64BufferAttribute( array, itemSize );\n\n}\n\n//\n\nCurve.create = function ( construct, getPoint ) {\n\n\tconsole.log( 'THREE.Curve.create() has been deprecated' );\n\n\tconstruct.prototype = Object.create( Curve.prototype );\n\tconstruct.prototype.constructor = construct;\n\tconstruct.prototype.getPoint = getPoint;\n\n\treturn construct;\n\n};\n\n//\n\nObject.assign( CurvePath.prototype, {\n\n\tcreatePointsGeometry: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t// generate geometry from path points (for Line or Points objects)\n\n\t\tvar pts = this.getPoints( divisions );\n\t\treturn this.createGeometry( pts );\n\n\t},\n\n\tcreateSpacedPointsGeometry: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t// generate geometry from equidistant sampling along the path\n\n\t\tvar pts = this.getSpacedPoints( divisions );\n\t\treturn this.createGeometry( pts );\n\n\t},\n\n\tcreateGeometry: function ( points ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\tvar geometry = new Geometry();\n\n\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tvar point = points[ i ];\n\t\t\tgeometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\n//\n\nObject.assign( Path.prototype, {\n\n\tfromPoints: function ( points ) {\n\n\t\tconsole.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' );\n\t\tthis.setFromPoints( points );\n\n\t}\n\n} );\n\n//\n\nfunction ClosedSplineCurve3( points ) {\n\n\tconsole.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\tthis.closed = true;\n\n}\n\nClosedSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n//\n\nfunction SplineCurve3( points ) {\n\n\tconsole.warn( 'THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\n}\n\nSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n//\n\nfunction Spline( points ) {\n\n\tconsole.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\n}\n\nSpline.prototype = Object.create( CatmullRomCurve3.prototype );\n\nObject.assign( Spline.prototype, {\n\n\tinitFromArray: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .initFromArray() has been removed.' );\n\n\t},\n\tgetControlPointsArray: function ( /* optionalTarget */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .getControlPointsArray() has been removed.' );\n\n\t},\n\treparametrizeByArcLength: function ( /* samplingCoef */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nfunction AxisHelper( size ) {\n\n\tconsole.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' );\n\treturn new AxesHelper( size );\n\n}\n\nfunction BoundingBoxHelper( object, color ) {\n\n\tconsole.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' );\n\treturn new BoxHelper( object, color );\n\n}\n\nfunction EdgesHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' );\n\treturn new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\nGridHelper.prototype.setColors = function () {\n\n\tconsole.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' );\n\n};\n\nSkeletonHelper.prototype.update = function () {\n\n\tconsole.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' );\n\n};\n\nfunction WireframeHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' );\n\treturn new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\n//\n\nObject.assign( Loader.prototype, {\n\n\textractUrlBase: function ( url ) {\n\n\t\tconsole.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' );\n\t\treturn LoaderUtils.extractUrlBase( url );\n\n\t}\n\n} );\n\nfunction XHRLoader( manager ) {\n\n\tconsole.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' );\n\treturn new FileLoader( manager );\n\n}\n\nfunction BinaryTextureLoader( manager ) {\n\n\tconsole.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' );\n\treturn new DataTextureLoader( manager );\n\n}\n\n//\n\nObject.assign( Box2.prototype, {\n\n\tcenter: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t},\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tsize: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box2: .size() has been renamed to .getSize().' );\n\t\treturn this.getSize( optionalTarget );\n\n\t}\n} );\n\nObject.assign( Box3.prototype, {\n\n\tcenter: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t},\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tisIntersectionSphere: function ( sphere ) {\n\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\treturn this.intersectsSphere( sphere );\n\n\t},\n\tsize: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box3: .size() has been renamed to .getSize().' );\n\t\treturn this.getSize( optionalTarget );\n\n\t}\n} );\n\nLine3.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\nObject.assign( _Math, {\n\n\trandom16: function () {\n\n\t\tconsole.warn( 'THREE.Math: .random16() has been deprecated. Use Math.random() instead.' );\n\t\treturn Math.random();\n\n\t},\n\n\tnearestPowerOfTwo: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().' );\n\t\treturn _Math.floorPowerOfTwo( value );\n\n\t},\n\n\tnextPowerOfTwo: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().' );\n\t\treturn _Math.ceilPowerOfTwo( value );\n\n\t}\n\n} );\n\nObject.assign( Matrix3.prototype, {\n\n\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\tconsole.warn( \"THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\treturn this.toArray( array, offset );\n\n\t},\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\n\t\treturn vector.applyMatrix3( this );\n\n\t},\n\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' );\n\n\t},\n\tapplyToBuffer: function ( buffer /*, offset, length */ ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' );\n\t\treturn this.applyToBufferAttribute( buffer );\n\n\t},\n\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\tconsole.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' );\n\n\t}\n\n} );\n\nObject.assign( Matrix4.prototype, {\n\n\textractPosition: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\n\t\treturn this.copyPosition( m );\n\n\t},\n\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\tconsole.warn( \"THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\treturn this.toArray( array, offset );\n\n\t},\n\tgetPosition: function () {\n\n\t\tvar v1;\n\n\t\treturn function getPosition() {\n\n\t\t\tif ( v1 === undefined ) v1 = new Vector3();\n\t\t\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\n\t\t\treturn v1.setFromMatrixColumn( this, 3 );\n\n\t\t};\n\n\t}(),\n\tsetRotationFromQuaternion: function ( q ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\n\t\treturn this.makeRotationFromQuaternion( q );\n\n\t},\n\tmultiplyToArray: function () {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' );\n\n\t},\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\tmultiplyVector4: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' );\n\n\t},\n\trotateAxis: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\n\t\tv.transformDirection( this );\n\n\t},\n\tcrossVector: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\ttranslate: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .translate() has been removed.' );\n\n\t},\n\trotateX: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateX() has been removed.' );\n\n\t},\n\trotateY: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateY() has been removed.' );\n\n\t},\n\trotateZ: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateZ() has been removed.' );\n\n\t},\n\trotateByAxis: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\n\n\t},\n\tapplyToBuffer: function ( buffer /*, offset, length */ ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' );\n\t\treturn this.applyToBufferAttribute( buffer );\n\n\t},\n\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\tconsole.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' );\n\n\t},\n\tmakeFrustum: function ( left, right, bottom, top, near, far ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' );\n\t\treturn this.makePerspective( left, right, top, bottom, near, far );\n\n\t}\n\n} );\n\nPlane.prototype.isIntersectionLine = function ( line ) {\n\n\tconsole.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' );\n\treturn this.intersectsLine( line );\n\n};\n\nQuaternion.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' );\n\treturn vector.applyQuaternion( this );\n\n};\n\nObject.assign( Ray.prototype, {\n\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tisIntersectionPlane: function ( plane ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' );\n\t\treturn this.intersectsPlane( plane );\n\n\t},\n\tisIntersectionSphere: function ( sphere ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\treturn this.intersectsSphere( sphere );\n\n\t}\n\n} );\n\nObject.assign( Triangle.prototype, {\n\n\tarea: function () {\n\n\t\tconsole.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' );\n\t\treturn this.getArea();\n\n\t},\n\tbarycoordFromPoint: function ( point, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\treturn this.getBarycoord( point, target );\n\n\t},\n\tmidpoint: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' );\n\t\treturn this.getMidpoint( target );\n\n\t},\n\tnormal: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\treturn this.getNormal( target );\n\n\t},\n\tplane: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' );\n\t\treturn this.getPlane( target );\n\n\t}\n\n} );\n\nObject.assign( Triangle, {\n\n\tbarycoordFromPoint: function ( point, a, b, c, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\treturn Triangle.getBarycoord( point, a, b, c, target );\n\n\t},\n\tnormal: function ( a, b, c, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\treturn Triangle.getNormal( a, b, c, target );\n\n\t}\n\n} );\n\nObject.assign( Shape.prototype, {\n\n\textractAllPoints: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' );\n\t\treturn this.extractPoints( divisions );\n\n\t},\n\textrude: function ( options ) {\n\n\t\tconsole.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' );\n\t\treturn new ExtrudeGeometry( this, options );\n\n\t},\n\tmakeGeometry: function ( options ) {\n\n\t\tconsole.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' );\n\t\treturn new ShapeGeometry( this, options );\n\n\t}\n\n} );\n\nObject.assign( Vector2.prototype, {\n\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tdistanceToManhattan: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\treturn this.manhattanDistanceTo( v );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\nObject.assign( Vector3.prototype, {\n\n\tsetEulerFromRotationMatrix: function () {\n\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\n\n\t},\n\tsetEulerFromQuaternion: function () {\n\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\n\n\t},\n\tgetPositionFromMatrix: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\n\t\treturn this.setFromMatrixPosition( m );\n\n\t},\n\tgetScaleFromMatrix: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\n\t\treturn this.setFromMatrixScale( m );\n\n\t},\n\tgetColumnFromMatrix: function ( index, matrix ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\n\t\treturn this.setFromMatrixColumn( matrix, index );\n\n\t},\n\tapplyProjection: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' );\n\t\treturn this.applyMatrix4( m );\n\n\t},\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tdistanceToManhattan: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\treturn this.manhattanDistanceTo( v );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\nObject.assign( Vector4.prototype, {\n\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\n//\n\nObject.assign( Geometry.prototype, {\n\n\tcomputeTangents: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeTangents() has been removed.' );\n\n\t},\n\tcomputeLineDistances: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' );\n\n\t}\n\n} );\n\nObject.assign( Object3D.prototype, {\n\n\tgetChildByName: function ( name ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\n\t\treturn this.getObjectByName( name );\n\n\t},\n\trenderDepth: function () {\n\n\t\tconsole.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' );\n\n\t},\n\ttranslate: function ( distance, axis ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\n\t\treturn this.translateOnAxis( axis, distance );\n\n\t},\n\tgetWorldRotation: function () {\n\n\t\tconsole.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' );\n\n\t}\n\n} );\n\nObject.defineProperties( Object3D.prototype, {\n\n\teulerOrder: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\treturn this.rotation.order;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\tthis.rotation.order = value;\n\n\t\t}\n\t},\n\tuseQuaternion: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( LOD.prototype, {\n\n\tobjects: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.LOD: .objects has been renamed to .levels.' );\n\t\t\treturn this.levels;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperty( Skeleton.prototype, 'useVertexTexture', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t},\n\tset: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t}\n\n} );\n\nObject.defineProperty( Curve.prototype, '__arcLengthDivisions', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\treturn this.arcLengthDivisions;\n\n\t},\n\tset: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\tthis.arcLengthDivisions = value;\n\n\t}\n\n} );\n\n//\n\nPerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) {\n\n\tconsole.warn( \"THREE.PerspectiveCamera.setLens is deprecated. \" +\n\t\t\t\"Use .setFocalLength and .filmGauge for a photographic setup.\" );\n\n\tif ( filmGauge !== undefined ) this.filmGauge = filmGauge;\n\tthis.setFocalLength( focalLength );\n\n};\n\n//\n\nObject.defineProperties( Light.prototype, {\n\tonlyShadow: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .onlyShadow has been removed.' );\n\n\t\t}\n\t},\n\tshadowCameraFov: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' );\n\t\t\tthis.shadow.camera.fov = value;\n\n\t\t}\n\t},\n\tshadowCameraLeft: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' );\n\t\t\tthis.shadow.camera.left = value;\n\n\t\t}\n\t},\n\tshadowCameraRight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' );\n\t\t\tthis.shadow.camera.right = value;\n\n\t\t}\n\t},\n\tshadowCameraTop: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' );\n\t\t\tthis.shadow.camera.top = value;\n\n\t\t}\n\t},\n\tshadowCameraBottom: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' );\n\t\t\tthis.shadow.camera.bottom = value;\n\n\t\t}\n\t},\n\tshadowCameraNear: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' );\n\t\t\tthis.shadow.camera.near = value;\n\n\t\t}\n\t},\n\tshadowCameraFar: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' );\n\t\t\tthis.shadow.camera.far = value;\n\n\t\t}\n\t},\n\tshadowCameraVisible: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' );\n\n\t\t}\n\t},\n\tshadowBias: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' );\n\t\t\tthis.shadow.bias = value;\n\n\t\t}\n\t},\n\tshadowDarkness: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowDarkness has been removed.' );\n\n\t\t}\n\t},\n\tshadowMapWidth: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' );\n\t\t\tthis.shadow.mapSize.width = value;\n\n\t\t}\n\t},\n\tshadowMapHeight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' );\n\t\t\tthis.shadow.mapSize.height = value;\n\n\t\t}\n\t}\n} );\n\n//\n\nObject.defineProperties( BufferAttribute.prototype, {\n\n\tlength: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' );\n\t\t\treturn this.array.length;\n\n\t\t}\n\t},\n\tcopyIndicesArray: function ( /* indices */ ) {\n\n\t\tconsole.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' );\n\n\t}\n\n} );\n\nObject.assign( BufferGeometry.prototype, {\n\n\taddIndex: function ( index ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' );\n\t\tthis.setIndex( index );\n\n\t},\n\taddDrawCall: function ( start, count, indexOffset ) {\n\n\t\tif ( indexOffset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' );\n\n\t\t}\n\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' );\n\t\tthis.addGroup( start, count );\n\n\t},\n\tclearDrawCalls: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' );\n\t\tthis.clearGroups();\n\n\t},\n\tcomputeTangents: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' );\n\n\t},\n\tcomputeOffsets: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' );\n\n\t}\n\n} );\n\nObject.defineProperties( BufferGeometry.prototype, {\n\n\tdrawcalls: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t},\n\toffsets: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.assign( ExtrudeBufferGeometry.prototype, {\n\n\tgetArrays: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .getArrays() has been removed.' );\n\n\t},\n\n\taddShapeList: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.' );\n\n\t},\n\n\taddShape: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShape() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Uniform.prototype, {\n\n\tdynamic: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' );\n\n\t\t}\n\t},\n\tonUpdate: {\n\t\tvalue: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' );\n\t\t\treturn this;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Material.prototype, {\n\n\twrapAround: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t}\n\t},\n\twrapRGB: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapRGB has been removed.' );\n\t\t\treturn new Color();\n\n\t\t}\n\t},\n\n\tshading: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\tthis.flatShading = ( value === FlatShading );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( MeshPhongMaterial.prototype, {\n\n\tmetal: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( ShaderMaterial.prototype, {\n\n\tderivatives: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\treturn this.extensions.derivatives;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\tthis.extensions.derivatives = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.assign( WebGLRenderer.prototype, {\n\n\tanimate: function ( callback ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' );\n\t\tthis.setAnimationLoop( callback );\n\n\t},\n\n\tgetCurrentRenderTarget: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' );\n\t\treturn this.getRenderTarget();\n\n\t},\n\n\tgetMaxAnisotropy: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' );\n\t\treturn this.capabilities.getMaxAnisotropy();\n\n\t},\n\n\tgetPrecision: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' );\n\t\treturn this.capabilities.precision;\n\n\t},\n\n\tresetGLState: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' );\n\t\treturn this.state.reset();\n\n\t},\n\n\tsupportsFloatTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \\'OES_texture_float\\' ).' );\n\t\treturn this.extensions.get( 'OES_texture_float' );\n\n\t},\n\tsupportsHalfFloatTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \\'OES_texture_half_float\\' ).' );\n\t\treturn this.extensions.get( 'OES_texture_half_float' );\n\n\t},\n\tsupportsStandardDerivatives: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \\'OES_standard_derivatives\\' ).' );\n\t\treturn this.extensions.get( 'OES_standard_derivatives' );\n\n\t},\n\tsupportsCompressedTextureS3TC: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \\'WEBGL_compressed_texture_s3tc\\' ).' );\n\t\treturn this.extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t},\n\tsupportsCompressedTexturePVRTC: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \\'WEBGL_compressed_texture_pvrtc\\' ).' );\n\t\treturn this.extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t},\n\tsupportsBlendMinMax: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \\'EXT_blend_minmax\\' ).' );\n\t\treturn this.extensions.get( 'EXT_blend_minmax' );\n\n\t},\n\tsupportsVertexTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' );\n\t\treturn this.capabilities.vertexTextures;\n\n\t},\n\tsupportsInstancedArrays: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \\'ANGLE_instanced_arrays\\' ).' );\n\t\treturn this.extensions.get( 'ANGLE_instanced_arrays' );\n\n\t},\n\tenableScissorTest: function ( boolean ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' );\n\t\tthis.setScissorTest( boolean );\n\n\t},\n\tinitMaterial: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );\n\n\t},\n\taddPrePlugin: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' );\n\n\t},\n\taddPostPlugin: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' );\n\n\t},\n\tupdateShadowMap: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' );\n\n\t},\n\tsetFaceCulling: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' );\n\n\t}\n\n} );\n\nObject.defineProperties( WebGLRenderer.prototype, {\n\n\tshadowMapEnabled: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.enabled;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' );\n\t\t\tthis.shadowMap.enabled = value;\n\n\t\t}\n\t},\n\tshadowMapType: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' );\n\t\t\tthis.shadowMap.type = value;\n\n\t\t}\n\t},\n\tshadowMapCullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t}\n} );\n\nObject.defineProperties( WebGLShadowMap.prototype, {\n\n\tcullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* cullFace */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderReverseSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderSingleSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( WebGLRenderTarget.prototype, {\n\n\twrapS: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\treturn this.texture.wrapS;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\tthis.texture.wrapS = value;\n\n\t\t}\n\t},\n\twrapT: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\treturn this.texture.wrapT;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\tthis.texture.wrapT = value;\n\n\t\t}\n\t},\n\tmagFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\treturn this.texture.magFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\tthis.texture.magFilter = value;\n\n\t\t}\n\t},\n\tminFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\treturn this.texture.minFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\tthis.texture.minFilter = value;\n\n\t\t}\n\t},\n\tanisotropy: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\treturn this.texture.anisotropy;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\tthis.texture.anisotropy = value;\n\n\t\t}\n\t},\n\toffset: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\treturn this.texture.offset;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\tthis.texture.offset = value;\n\n\t\t}\n\t},\n\trepeat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\treturn this.texture.repeat;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\tthis.texture.repeat = value;\n\n\t\t}\n\t},\n\tformat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\treturn this.texture.format;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\tthis.texture.format = value;\n\n\t\t}\n\t},\n\ttype: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\treturn this.texture.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\tthis.texture.type = value;\n\n\t\t}\n\t},\n\tgenerateMipmaps: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\treturn this.texture.generateMipmaps;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\tthis.texture.generateMipmaps = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( WebVRManager.prototype, {\n\n\tstanding: {\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebVRManager: .standing has been removed.' );\n\n\t\t}\n\t}\n\n} );\n\n//\n\nAudio.prototype.load = function ( file ) {\n\n\tconsole.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' );\n\tvar scope = this;\n\tvar audioLoader = new AudioLoader();\n\taudioLoader.load( file, function ( buffer ) {\n\n\t\tscope.setBuffer( buffer );\n\n\t} );\n\treturn this;\n\n};\n\nAudioAnalyser.prototype.getData = function () {\n\n\tconsole.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' );\n\treturn this.getFrequencyData();\n\n};\n\n//\n\nCubeCamera.prototype.updateCubeMap = function ( renderer, scene ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' );\n\treturn this.update( renderer, scene );\n\n};\n\n//\n\nvar GeometryUtils = {\n\n\tmerge: function ( geometry1, geometry2, materialIndexOffset ) {\n\n\t\tconsole.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' );\n\t\tvar matrix;\n\n\t\tif ( geometry2.isMesh ) {\n\n\t\t\tgeometry2.matrixAutoUpdate && geometry2.updateMatrix();\n\n\t\t\tmatrix = geometry2.matrix;\n\t\t\tgeometry2 = geometry2.geometry;\n\n\t\t}\n\n\t\tgeometry1.merge( geometry2, matrix, materialIndexOffset );\n\n\t},\n\n\tcenter: function ( geometry ) {\n\n\t\tconsole.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' );\n\t\treturn geometry.center();\n\n\t}\n\n};\n\nvar ImageUtils = {\n\n\tcrossOrigin: undefined,\n\n\tloadTexture: function ( url, mapping, onLoad, onError ) {\n\n\t\tconsole.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' );\n\n\t\tvar loader = new TextureLoader();\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\tvar texture = loader.load( url, onLoad, undefined, onError );\n\n\t\tif ( mapping ) texture.mapping = mapping;\n\n\t\treturn texture;\n\n\t},\n\n\tloadTextureCube: function ( urls, mapping, onLoad, onError ) {\n\n\t\tconsole.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' );\n\n\t\tvar loader = new CubeTextureLoader();\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\tvar texture = loader.load( urls, onLoad, undefined, onError );\n\n\t\tif ( mapping ) texture.mapping = mapping;\n\n\t\treturn texture;\n\n\t},\n\n\tloadCompressedTexture: function () {\n\n\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' );\n\n\t},\n\n\tloadCompressedTextureCube: function () {\n\n\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' );\n\n\t}\n\n};\n\n//\n\nfunction Projector() {\n\n\tconsole.error( 'THREE.Projector has been moved to /examples/js/renderers/Projector.js.' );\n\n\tthis.projectVector = function ( vector, camera ) {\n\n\t\tconsole.warn( 'THREE.Projector: .projectVector() is now vector.project().' );\n\t\tvector.project( camera );\n\n\t};\n\n\tthis.unprojectVector = function ( vector, camera ) {\n\n\t\tconsole.warn( 'THREE.Projector: .unprojectVector() is now vector.unproject().' );\n\t\tvector.unproject( camera );\n\n\t};\n\n\tthis.pickingRay = function () {\n\n\t\tconsole.error( 'THREE.Projector: .pickingRay() is now raycaster.setFromCamera().' );\n\n\t};\n\n}\n\n//\n\nfunction CanvasRenderer() {\n\n\tconsole.error( 'THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js' );\n\n\tthis.domElement = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\tthis.clear = function () {};\n\tthis.render = function () {};\n\tthis.setClearColor = function () {};\n\tthis.setSize = function () {};\n\n}\n\n//\n\nvar SceneUtils = {\n\n\tcreateMultiMaterialObject: function ( /* geometry, materials */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t},\n\n\tdetach: function ( /* child, parent, scene */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t},\n\n\tattach: function ( /* child, scene, parent */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t}\n\n};\n\n//\n\nfunction LensFlare() {\n\n\tconsole.error( 'THREE.LensFlare has been moved to /examples/js/objects/Lensflare.js' );\n\n}\n\nexport { WebGLRenderTargetCube, WebGLRenderTarget, WebGLRenderer, ShaderLib, UniformsLib, UniformsUtils, ShaderChunk, FogExp2, Fog, Scene, Sprite, LOD, SkinnedMesh, Skeleton, Bone, Mesh, LineSegments, LineLoop, Line, Points, Group, VideoTexture, DataTexture, CompressedTexture, CubeTexture, CanvasTexture, DepthTexture, Texture, CompressedTextureLoader, DataTextureLoader, CubeTextureLoader, TextureLoader, ObjectLoader, MaterialLoader, BufferGeometryLoader, DefaultLoadingManager, LoadingManager, JSONLoader, ImageLoader, ImageBitmapLoader, FontLoader, FileLoader, Loader, LoaderUtils, Cache, AudioLoader, SpotLightShadow, SpotLight, PointLight, RectAreaLight, HemisphereLight, DirectionalLightShadow, DirectionalLight, AmbientLight, LightShadow, Light, StereoCamera, PerspectiveCamera, OrthographicCamera, CubeCamera, ArrayCamera, Camera, AudioListener, PositionalAudio, AudioContext, AudioAnalyser, Audio, VectorKeyframeTrack, StringKeyframeTrack, QuaternionKeyframeTrack, NumberKeyframeTrack, ColorKeyframeTrack, BooleanKeyframeTrack, PropertyMixer, PropertyBinding, KeyframeTrack, AnimationUtils, AnimationObjectGroup, AnimationMixer, AnimationClip, Uniform, InstancedBufferGeometry, BufferGeometry, Geometry, InterleavedBufferAttribute, InstancedInterleavedBuffer, InterleavedBuffer, InstancedBufferAttribute, Face3, Object3D, Raycaster, Layers, EventDispatcher, Clock, QuaternionLinearInterpolant, LinearInterpolant, DiscreteInterpolant, CubicInterpolant, Interpolant, Triangle, _Math as Math, Spherical, Cylindrical, Plane, Frustum, Sphere, Ray, Matrix4, Matrix3, Box3, Box2, Line3, Euler, Vector4, Vector3, Vector2, Quaternion, Color, ImmediateRenderObject, VertexNormalsHelper, SpotLightHelper, SkeletonHelper, PointLightHelper, RectAreaLightHelper, HemisphereLightHelper, GridHelper, PolarGridHelper, FaceNormalsHelper, DirectionalLightHelper, CameraHelper, BoxHelper, Box3Helper, PlaneHelper, ArrowHelper, AxesHelper, Shape, Path, ShapePath, Font, CurvePath, Curve, ShapeUtils, WebGLUtils, WireframeGeometry, ParametricGeometry, ParametricBufferGeometry, TetrahedronGeometry, TetrahedronBufferGeometry, OctahedronGeometry, OctahedronBufferGeometry, IcosahedronGeometry, IcosahedronBufferGeometry, DodecahedronGeometry, DodecahedronBufferGeometry, PolyhedronGeometry, PolyhedronBufferGeometry, TubeGeometry, TubeBufferGeometry, TorusKnotGeometry, TorusKnotBufferGeometry, TorusGeometry, TorusBufferGeometry, TextGeometry, TextBufferGeometry, SphereGeometry, SphereBufferGeometry, RingGeometry, RingBufferGeometry, PlaneGeometry, PlaneBufferGeometry, LatheGeometry, LatheBufferGeometry, ShapeGeometry, ShapeBufferGeometry, ExtrudeGeometry, ExtrudeBufferGeometry, EdgesGeometry, ConeGeometry, ConeBufferGeometry, CylinderGeometry, CylinderBufferGeometry, CircleGeometry, CircleBufferGeometry, BoxGeometry, BoxBufferGeometry, ShadowMaterial, SpriteMaterial, RawShaderMaterial, ShaderMaterial, PointsMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshPhongMaterial, MeshToonMaterial, MeshNormalMaterial, MeshLambertMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshBasicMaterial, LineDashedMaterial, LineBasicMaterial, Material, Float64BufferAttribute, Float32BufferAttribute, Uint32BufferAttribute, Int32BufferAttribute, Uint16BufferAttribute, Int16BufferAttribute, Uint8ClampedBufferAttribute, Uint8BufferAttribute, Int8BufferAttribute, BufferAttribute, ArcCurve, CatmullRomCurve3, CubicBezierCurve, CubicBezierCurve3, EllipseCurve, LineCurve, LineCurve3, QuadraticBezierCurve, QuadraticBezierCurve3, SplineCurve, REVISION, MOUSE, 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, UnsignedInt248Type, AlphaFormat, RGBFormat, RGBAFormat, LuminanceFormat, LuminanceAlphaFormat, RGBEFormat, DepthFormat, DepthStencilFormat, 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, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, LoopOnce, LoopRepeat, LoopPingPong, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, ZeroCurvatureEnding, ZeroSlopeEnding, WrapAroundEnding, TrianglesDrawMode, TriangleStripDrawMode, TriangleFanDrawMode, LinearEncoding, sRGBEncoding, GammaEncoding, RGBEEncoding, LogLuvEncoding, RGBM7Encoding, RGBM16Encoding, RGBDEncoding, BasicDepthPacking, RGBADepthPacking, TangentSpaceNormalMap, ObjectSpaceNormalMap, BoxGeometry as CubeGeometry, Face4, LineStrip, LinePieces, MeshFaceMaterial, MultiMaterial, PointCloud, Particle, ParticleSystem, PointCloudMaterial, ParticleBasicMaterial, ParticleSystemMaterial, Vertex, DynamicBufferAttribute, Int8Attribute, Uint8Attribute, Uint8ClampedAttribute, Int16Attribute, Uint16Attribute, Int32Attribute, Uint32Attribute, Float32Attribute, Float64Attribute, ClosedSplineCurve3, SplineCurve3, Spline, AxisHelper, BoundingBoxHelper, EdgesHelper, WireframeHelper, XHRLoader, BinaryTextureLoader, GeometryUtils, ImageUtils, Projector, CanvasRenderer, SceneUtils, LensFlare };\n","/**\n * @author Rich Tibbett / https://github.com/richtr\n * @author mrdoob / http://mrdoob.com/\n * @author Tony Parisi / http://www.tonyparisi.com/\n * @author Takahiro / https://github.com/takahirox\n * @author Don McCurdy / https://www.donmccurdy.com\n */\n\nimport * as THREE from 'three';\n\nTHREE.GLTFLoader = ( function () {\n\n\tfunction GLTFLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\n\t\tthis.dracoLoader = null;\n\n\t}\n\n\tGLTFLoader.prototype = {\n\n\t\tconstructor: GLTFLoader,\n\n\t\tcrossOrigin: 'anonymous',\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar path = this.path !== undefined ? this.path : THREE.LoaderUtils.extractUrlBase( url );\n\n\t\t\tvar loader = new THREE.FileLoader( scope.manager );\n\n\t\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\t\tloader.load( url, function ( data ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tscope.parse( data, path, onLoad, onError );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError !== undefined ) {\n\n\t\t\t\t\t\tonError( e );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthrow e;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tsetCrossOrigin: function ( value ) {\n\n\t\t\tthis.crossOrigin = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetPath: function ( value ) {\n\n\t\t\tthis.path = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetDRACOLoader: function ( dracoLoader ) {\n\n\t\t\tthis.dracoLoader = dracoLoader;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tparse: function ( data, path, onLoad, onError ) {\n\n\t\t\tvar content;\n\t\t\tvar extensions = {};\n\n\t\t\tif ( typeof data === 'string' ) {\n\n\t\t\t\tcontent = data;\n\n\t\t\t} else {\n\n\t\t\t\tvar magic = THREE.LoaderUtils.decodeText( new Uint8Array( data, 0, 4 ) );\n\n\t\t\t\tif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\textensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );\n\n\t\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t\tif ( onError ) onError( error );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontent = extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcontent = THREE.LoaderUtils.decodeText( new Uint8Array( data ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar json = JSON.parse( content );\n\n\t\t\tif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {\n\n\t\t\t\tif ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported. Use LegacyGLTFLoader instead.' ) );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( json.extensionsUsed ) {\n\n\t\t\t\tfor ( var i = 0; i < json.extensionsUsed.length; ++ i ) {\n\n\t\t\t\t\tvar extensionName = json.extensionsUsed[ i ];\n\t\t\t\t\tvar extensionsRequired = json.extensionsRequired || [];\n\n\t\t\t\t\tswitch ( extensionName ) {\n\n\t\t\t\t\t\tcase EXTENSIONS.KHR_LIGHTS:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFLightsExtension( json );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_UNLIT:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsUnlitExtension( json );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsPbrSpecularGlossinessExtension();\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EXTENSIONS.MSFT_TEXTURE_DDS:\n\t\t\t\t\t\t\textensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] = new GLTFTextureDDSExtension();\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tif ( extensionsRequired.indexOf( extensionName ) >= 0 ) {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar parser = new GLTFParser( json, extensions, {\n\n\t\t\t\tpath: path || this.path || '',\n\t\t\t\tcrossOrigin: this.crossOrigin,\n\t\t\t\tmanager: this.manager\n\n\t\t\t} );\n\n\t\t\tparser.parse( function ( scene, scenes, cameras, animations, json ) {\n\n\t\t\t\tvar glTF = {\n\t\t\t\t\tscene: scene,\n\t\t\t\t\tscenes: scenes,\n\t\t\t\t\tcameras: cameras,\n\t\t\t\t\tanimations: animations,\n\t\t\t\t\tasset: json.asset,\n\t\t\t\t\tparser: parser,\n\t\t\t\t\tuserData: {}\n\t\t\t\t};\n\n\t\t\t\taddUnknownExtensionsToUserData( extensions, glTF, json );\n\n\t\t\t\tonLoad( glTF );\n\n\t\t\t}, onError );\n\n\t\t}\n\n\t};\n\n\t/* GLTFREGISTRY */\n\n\tfunction GLTFRegistry() {\n\n\t\tvar objects = {};\n\n\t\treturn\t{\n\n\t\t\tget: function ( key ) {\n\n\t\t\t\treturn objects[ key ];\n\n\t\t\t},\n\n\t\t\tadd: function ( key, object ) {\n\n\t\t\t\tobjects[ key ] = object;\n\n\t\t\t},\n\n\t\t\tremove: function ( key ) {\n\n\t\t\t\tdelete objects[ key ];\n\n\t\t\t},\n\n\t\t\tremoveAll: function () {\n\n\t\t\t\tobjects = {};\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t/*********************************/\n\t/********** EXTENSIONS ***********/\n\t/*********************************/\n\n\tvar EXTENSIONS = {\n\t\tKHR_BINARY_GLTF: 'KHR_binary_glTF',\n\t\tKHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',\n\t\tKHR_LIGHTS: 'KHR_lights',\n\t\tKHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness',\n\t\tKHR_MATERIALS_UNLIT: 'KHR_materials_unlit',\n\t\tMSFT_TEXTURE_DDS: 'MSFT_texture_dds'\n\t};\n\n\t/**\n\t * DDS Texture Extension\n\t *\n\t * Specification:\n\t * https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/MSFT_texture_dds\n\t *\n\t */\n\tfunction GLTFTextureDDSExtension() {\n\n\t\tif ( ! THREE.DDSLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Attempting to load .dds texture without importing THREE.DDSLoader' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.MSFT_TEXTURE_DDS;\n\t\tthis.ddsLoader = new THREE.DDSLoader();\n\n\t}\n\n\t/**\n\t * Lights Extension\n\t *\n\t * Specification: PENDING\n\t */\n\tfunction GLTFLightsExtension( json ) {\n\n\t\tthis.name = EXTENSIONS.KHR_LIGHTS;\n\n\t\tthis.lights = {};\n\n\t\tvar extension = ( json.extensions && json.extensions[ EXTENSIONS.KHR_LIGHTS ] ) || {};\n\t\tvar lights = extension.lights || {};\n\n\t\tfor ( var lightId in lights ) {\n\n\t\t\tvar light = lights[ lightId ];\n\t\t\tvar lightNode;\n\n\t\t\tvar color = new THREE.Color().fromArray( light.color );\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'directional':\n\t\t\t\t\tlightNode = new THREE.DirectionalLight( color );\n\t\t\t\t\tlightNode.target.position.set( 0, 0, 1 );\n\t\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'point':\n\t\t\t\t\tlightNode = new THREE.PointLight( color );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'spot':\n\t\t\t\t\tlightNode = new THREE.SpotLight( color );\n\t\t\t\t\t// Handle spotlight properties.\n\t\t\t\t\tlight.spot = light.spot || {};\n\t\t\t\t\tlight.spot.innerConeAngle = light.spot.innerConeAngle !== undefined ? light.spot.innerConeAngle : 0;\n\t\t\t\t\tlight.spot.outerConeAngle = light.spot.outerConeAngle !== undefined ? light.spot.outerConeAngle : Math.PI / 4.0;\n\t\t\t\t\tlightNode.angle = light.spot.outerConeAngle;\n\t\t\t\t\tlightNode.penumbra = 1.0 - light.spot.innerConeAngle / light.spot.outerConeAngle;\n\t\t\t\t\tlightNode.target.position.set( 0, 0, 1 );\n\t\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ambient':\n\t\t\t\t\tlightNode = new THREE.AmbientLight( color );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( lightNode ) {\n\n\t\t\t\tlightNode.decay = 2;\n\n\t\t\t\tif ( light.intensity !== undefined ) {\n\n\t\t\t\t\tlightNode.intensity = light.intensity;\n\n\t\t\t\t}\n\n\t\t\t\tlightNode.name = light.name || ( 'light_' + lightId );\n\t\t\t\tthis.lights[ lightId ] = lightNode;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Unlit Materials Extension (pending)\n\t *\n\t * PR: https://github.com/KhronosGroup/glTF/pull/1163\n\t */\n\tfunction GLTFMaterialsUnlitExtension( json ) {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n\n\t}\n\n\tGLTFMaterialsUnlitExtension.prototype.getMaterialType = function ( material ) {\n\n\t\treturn THREE.MeshBasicMaterial;\n\n\t};\n\n\tGLTFMaterialsUnlitExtension.prototype.extendParams = function ( materialParams, material, parser ) {\n\n\t\tvar pending = [];\n\n\t\tmaterialParams.color = new THREE.Color( 1.0, 1.0, 1.0 );\n\t\tmaterialParams.opacity = 1.0;\n\n\t\tvar metallicRoughness = material.pbrMetallicRoughness;\n\n\t\tif ( metallicRoughness ) {\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tvar array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture.index ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t};\n\n\t/* BINARY EXTENSION */\n\n\tvar BINARY_EXTENSION_BUFFER_NAME = 'binary_glTF';\n\tvar BINARY_EXTENSION_HEADER_MAGIC = 'glTF';\n\tvar BINARY_EXTENSION_HEADER_LENGTH = 12;\n\tvar BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };\n\n\tfunction GLTFBinaryExtension( data ) {\n\n\t\tthis.name = EXTENSIONS.KHR_BINARY_GLTF;\n\t\tthis.content = null;\n\t\tthis.body = null;\n\n\t\tvar headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );\n\n\t\tthis.header = {\n\t\t\tmagic: THREE.LoaderUtils.decodeText( new Uint8Array( data.slice( 0, 4 ) ) ),\n\t\t\tversion: headerView.getUint32( 4, true ),\n\t\t\tlength: headerView.getUint32( 8, true )\n\t\t};\n\n\t\tif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );\n\n\t\t} else if ( this.header.version < 2.0 ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected. Use LegacyGLTFLoader instead.' );\n\n\t\t}\n\n\t\tvar chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tvar chunkIndex = 0;\n\n\t\twhile ( chunkIndex < chunkView.byteLength ) {\n\n\t\t\tvar chunkLength = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tvar chunkType = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {\n\n\t\t\t\tvar contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );\n\t\t\t\tthis.content = THREE.LoaderUtils.decodeText( contentArray );\n\n\t\t\t} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {\n\n\t\t\t\tvar byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n\t\t\t\tthis.body = data.slice( byteOffset, byteOffset + chunkLength );\n\n\t\t\t}\n\n\t\t\t// Clients must ignore chunks with unknown types.\n\n\t\t\tchunkIndex += chunkLength;\n\n\t\t}\n\n\t\tif ( this.content === null ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * DRACO Mesh Compression Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/pull/874\n\t */\n\tfunction GLTFDracoMeshCompressionExtension( json, dracoLoader ) {\n\n\t\tif ( ! dracoLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n\t\tthis.json = json;\n\t\tthis.dracoLoader = dracoLoader;\n\n\t}\n\n\tGLTFDracoMeshCompressionExtension.prototype.decodePrimitive = function ( primitive, parser ) {\n\n\t\tvar json = this.json;\n\t\tvar dracoLoader = this.dracoLoader;\n\t\tvar bufferViewIndex = primitive.extensions[ this.name ].bufferView;\n\t\tvar gltfAttributeMap = primitive.extensions[ this.name ].attributes;\n\t\tvar threeAttributeMap = {};\n\t\tvar attributeNormalizedMap = {};\n\t\tvar attributeTypeMap = {};\n\n\t\tfor ( var attributeName in gltfAttributeMap ) {\n\n\t\t\tif ( ! ( attributeName in ATTRIBUTES ) ) continue;\n\n\t\t\tthreeAttributeMap[ ATTRIBUTES[ attributeName ] ] = gltfAttributeMap[ attributeName ];\n\n\t\t}\n\n\t\tfor ( attributeName in primitive.attributes ) {\n\n\t\t\tif ( ATTRIBUTES[ attributeName ] !== undefined && gltfAttributeMap[ attributeName ] !== undefined ) {\n\n\t\t\t\tvar accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];\n\t\t\t\tvar componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t\tattributeTypeMap[ ATTRIBUTES[ attributeName ] ] = componentType;\n\t\t\t\tattributeNormalizedMap[ ATTRIBUTES[ attributeName ] ] = accessorDef.normalized === true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {\n\n\t\t\treturn new Promise( function ( resolve ) {\n\n\t\t\t\tdracoLoader.decodeDracoFile( bufferView, function ( geometry ) {\n\n\t\t\t\t\tfor ( var attributeName in geometry.attributes ) {\n\n\t\t\t\t\t\tvar attribute = geometry.attributes[ attributeName ];\n\t\t\t\t\t\tvar normalized = attributeNormalizedMap[ attributeName ];\n\n\t\t\t\t\t\tif ( normalized !== undefined ) attribute.normalized = normalized;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve( geometry );\n\n\t\t\t\t}, threeAttributeMap, attributeTypeMap );\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specular-Glossiness Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness\n\t */\n\tfunction GLTFMaterialsPbrSpecularGlossinessExtension() {\n\n\t\treturn {\n\n\t\t\tname: EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS,\n\n\t\t\tspecularGlossinessParams: [\n\t\t\t\t'color',\n\t\t\t\t'map',\n\t\t\t\t'lightMap',\n\t\t\t\t'lightMapIntensity',\n\t\t\t\t'aoMap',\n\t\t\t\t'aoMapIntensity',\n\t\t\t\t'emissive',\n\t\t\t\t'emissiveIntensity',\n\t\t\t\t'emissiveMap',\n\t\t\t\t'bumpMap',\n\t\t\t\t'bumpScale',\n\t\t\t\t'normalMap',\n\t\t\t\t'displacementMap',\n\t\t\t\t'displacementScale',\n\t\t\t\t'displacementBias',\n\t\t\t\t'specularMap',\n\t\t\t\t'specular',\n\t\t\t\t'glossinessMap',\n\t\t\t\t'glossiness',\n\t\t\t\t'alphaMap',\n\t\t\t\t'envMap',\n\t\t\t\t'envMapIntensity',\n\t\t\t\t'refractionRatio',\n\t\t\t],\n\n\t\t\tgetMaterialType: function () {\n\n\t\t\t\treturn THREE.ShaderMaterial;\n\n\t\t\t},\n\n\t\t\textendParams: function ( params, material, parser ) {\n\n\t\t\t\tvar pbrSpecularGlossiness = material.extensions[ this.name ];\n\n\t\t\t\tvar shader = THREE.ShaderLib[ 'standard' ];\n\n\t\t\t\tvar uniforms = THREE.UniformsUtils.clone( shader.uniforms );\n\n\t\t\t\tvar specularMapParsFragmentChunk = [\n\t\t\t\t\t'#ifdef USE_SPECULARMAP',\n\t\t\t\t\t'\tuniform sampler2D specularMap;',\n\t\t\t\t\t'#endif'\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tvar glossinessMapParsFragmentChunk = [\n\t\t\t\t\t'#ifdef USE_GLOSSINESSMAP',\n\t\t\t\t\t'\tuniform sampler2D glossinessMap;',\n\t\t\t\t\t'#endif'\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tvar specularMapFragmentChunk = [\n\t\t\t\t\t'vec3 specularFactor = specular;',\n\t\t\t\t\t'#ifdef USE_SPECULARMAP',\n\t\t\t\t\t'\tvec4 texelSpecular = texture2D( specularMap, vUv );',\n\t\t\t\t\t'\ttexelSpecular = sRGBToLinear( texelSpecular );',\n\t\t\t\t\t'\t// reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture',\n\t\t\t\t\t'\tspecularFactor *= texelSpecular.rgb;',\n\t\t\t\t\t'#endif'\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tvar glossinessMapFragmentChunk = [\n\t\t\t\t\t'float glossinessFactor = glossiness;',\n\t\t\t\t\t'#ifdef USE_GLOSSINESSMAP',\n\t\t\t\t\t'\tvec4 texelGlossiness = texture2D( glossinessMap, vUv );',\n\t\t\t\t\t'\t// reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture',\n\t\t\t\t\t'\tglossinessFactor *= texelGlossiness.a;',\n\t\t\t\t\t'#endif'\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tvar lightPhysicalFragmentChunk = [\n\t\t\t\t\t'PhysicalMaterial material;',\n\t\t\t\t\t'material.diffuseColor = diffuseColor.rgb;',\n\t\t\t\t\t'material.specularRoughness = clamp( 1.0 - glossinessFactor, 0.04, 1.0 );',\n\t\t\t\t\t'material.specularColor = specularFactor.rgb;',\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tvar fragmentShader = shader.fragmentShader\n\t\t\t\t\t.replace( 'uniform float roughness;', 'uniform vec3 specular;' )\n\t\t\t\t\t.replace( 'uniform float metalness;', 'uniform float glossiness;' )\n\t\t\t\t\t.replace( '#include <roughnessmap_pars_fragment>', specularMapParsFragmentChunk )\n\t\t\t\t\t.replace( '#include <metalnessmap_pars_fragment>', glossinessMapParsFragmentChunk )\n\t\t\t\t\t.replace( '#include <roughnessmap_fragment>', specularMapFragmentChunk )\n\t\t\t\t\t.replace( '#include <metalnessmap_fragment>', glossinessMapFragmentChunk )\n\t\t\t\t\t.replace( '#include <lights_physical_fragment>', lightPhysicalFragmentChunk );\n\n\t\t\t\tdelete uniforms.roughness;\n\t\t\t\tdelete uniforms.metalness;\n\t\t\t\tdelete uniforms.roughnessMap;\n\t\t\t\tdelete uniforms.metalnessMap;\n\n\t\t\t\tuniforms.specular = { value: new THREE.Color().setHex( 0x111111 ) };\n\t\t\t\tuniforms.glossiness = { value: 0.5 };\n\t\t\t\tuniforms.specularMap = { value: null };\n\t\t\t\tuniforms.glossinessMap = { value: null };\n\n\t\t\t\tparams.vertexShader = shader.vertexShader;\n\t\t\t\tparams.fragmentShader = fragmentShader;\n\t\t\t\tparams.uniforms = uniforms;\n\t\t\t\tparams.defines = { 'STANDARD': '' };\n\n\t\t\t\tparams.color = new THREE.Color( 1.0, 1.0, 1.0 );\n\t\t\t\tparams.opacity = 1.0;\n\n\t\t\t\tvar pending = [];\n\n\t\t\t\tif ( Array.isArray( pbrSpecularGlossiness.diffuseFactor ) ) {\n\n\t\t\t\t\tvar array = pbrSpecularGlossiness.diffuseFactor;\n\n\t\t\t\t\tparams.color.fromArray( array );\n\t\t\t\t\tparams.opacity = array[ 3 ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( pbrSpecularGlossiness.diffuseTexture !== undefined ) {\n\n\t\t\t\t\tpending.push( parser.assignTexture( params, 'map', pbrSpecularGlossiness.diffuseTexture.index ) );\n\n\t\t\t\t}\n\n\t\t\t\tparams.emissive = new THREE.Color( 0.0, 0.0, 0.0 );\n\t\t\t\tparams.glossiness = pbrSpecularGlossiness.glossinessFactor !== undefined ? pbrSpecularGlossiness.glossinessFactor : 1.0;\n\t\t\t\tparams.specular = new THREE.Color( 1.0, 1.0, 1.0 );\n\n\t\t\t\tif ( Array.isArray( pbrSpecularGlossiness.specularFactor ) ) {\n\n\t\t\t\t\tparams.specular.fromArray( pbrSpecularGlossiness.specularFactor );\n\n\t\t\t\t}\n\n\t\t\t\tif ( pbrSpecularGlossiness.specularGlossinessTexture !== undefined ) {\n\n\t\t\t\t\tvar specGlossIndex = pbrSpecularGlossiness.specularGlossinessTexture.index;\n\t\t\t\t\tpending.push( parser.assignTexture( params, 'glossinessMap', specGlossIndex ) );\n\t\t\t\t\tpending.push( parser.assignTexture( params, 'specularMap', specGlossIndex ) );\n\n\t\t\t\t}\n\n\t\t\t\treturn Promise.all( pending );\n\n\t\t\t},\n\n\t\t\tcreateMaterial: function ( params ) {\n\n\t\t\t\t// setup material properties based on MeshStandardMaterial for Specular-Glossiness\n\n\t\t\t\tvar material = new THREE.ShaderMaterial( {\n\t\t\t\t\tdefines: params.defines,\n\t\t\t\t\tvertexShader: params.vertexShader,\n\t\t\t\t\tfragmentShader: params.fragmentShader,\n\t\t\t\t\tuniforms: params.uniforms,\n\t\t\t\t\tfog: true,\n\t\t\t\t\tlights: true,\n\t\t\t\t\topacity: params.opacity,\n\t\t\t\t\ttransparent: params.transparent\n\t\t\t\t} );\n\n\t\t\t\tmaterial.isGLTFSpecularGlossinessMaterial = true;\n\n\t\t\t\tmaterial.color = params.color;\n\n\t\t\t\tmaterial.map = params.map === undefined ? null : params.map;\n\n\t\t\t\tmaterial.lightMap = null;\n\t\t\t\tmaterial.lightMapIntensity = 1.0;\n\n\t\t\t\tmaterial.aoMap = params.aoMap === undefined ? null : params.aoMap;\n\t\t\t\tmaterial.aoMapIntensity = 1.0;\n\n\t\t\t\tmaterial.emissive = params.emissive;\n\t\t\t\tmaterial.emissiveIntensity = 1.0;\n\t\t\t\tmaterial.emissiveMap = params.emissiveMap === undefined ? null : params.emissiveMap;\n\n\t\t\t\tmaterial.bumpMap = params.bumpMap === undefined ? null : params.bumpMap;\n\t\t\t\tmaterial.bumpScale = 1;\n\n\t\t\t\tmaterial.normalMap = params.normalMap === undefined ? null : params.normalMap;\n\t\t\t\tif ( params.normalScale ) material.normalScale = params.normalScale;\n\n\t\t\t\tmaterial.displacementMap = null;\n\t\t\t\tmaterial.displacementScale = 1;\n\t\t\t\tmaterial.displacementBias = 0;\n\n\t\t\t\tmaterial.specularMap = params.specularMap === undefined ? null : params.specularMap;\n\t\t\t\tmaterial.specular = params.specular;\n\n\t\t\t\tmaterial.glossinessMap = params.glossinessMap === undefined ? null : params.glossinessMap;\n\t\t\t\tmaterial.glossiness = params.glossiness;\n\n\t\t\t\tmaterial.alphaMap = null;\n\n\t\t\t\tmaterial.envMap = params.envMap === undefined ? null : params.envMap;\n\t\t\t\tmaterial.envMapIntensity = 1.0;\n\n\t\t\t\tmaterial.refractionRatio = 0.98;\n\n\t\t\t\tmaterial.extensions.derivatives = true;\n\n\t\t\t\treturn material;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Clones a GLTFSpecularGlossinessMaterial instance. The ShaderMaterial.copy() method can\n\t\t\t * copy only properties it knows about or inherits, and misses many properties that would\n\t\t\t * normally be defined by MeshStandardMaterial.\n\t\t\t *\n\t\t\t * This method allows GLTFSpecularGlossinessMaterials to be cloned in the process of\n\t\t\t * loading a glTF model, but cloning later (e.g. by the user) would require these changes\n\t\t\t * AND also updating `.onBeforeRender` on the parent mesh.\n\t\t\t *\n\t\t\t * @param {THREE.ShaderMaterial} source\n\t\t\t * @return {THREE.ShaderMaterial}\n\t\t\t */\n\t\t\tcloneMaterial: function ( source ) {\n\n\t\t\t\tvar target = source.clone();\n\n\t\t\t\ttarget.isGLTFSpecularGlossinessMaterial = true;\n\n\t\t\t\tvar params = this.specularGlossinessParams;\n\n\t\t\t\tfor ( var i = 0, il = params.length; i < il; i ++ ) {\n\n\t\t\t\t\ttarget[ params[ i ] ] = source[ params[ i ] ];\n\n\t\t\t\t}\n\n\t\t\t\treturn target;\n\n\t\t\t},\n\n\t\t\t// Here's based on refreshUniformsCommon() and refreshUniformsStandard() in WebGLRenderer.\n\t\t\trefreshUniforms: function ( renderer, scene, camera, geometry, material, group ) {\n\n\t\t\t\tif ( material.isGLTFSpecularGlossinessMaterial !== true ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tvar uniforms = material.uniforms;\n\t\t\t\tvar defines = material.defines;\n\n\t\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t\t\tuniforms.diffuse.value.copy( material.color );\n\t\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t\t\tuniforms.map.value = material.map;\n\t\t\t\tuniforms.specularMap.value = material.specularMap;\n\t\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t\t\t// uv repeat and offset setting priorities\n\t\t\t\t// 1. color map\n\t\t\t\t// 2. specular map\n\t\t\t\t// 3. normal map\n\t\t\t\t// 4. bump map\n\t\t\t\t// 5. alpha map\n\t\t\t\t// 6. emissive map\n\n\t\t\t\tvar uvScaleMap;\n\n\t\t\t\tif ( material.map ) {\n\n\t\t\t\t\tuvScaleMap = material.map;\n\n\t\t\t\t} else if ( material.specularMap ) {\n\n\t\t\t\t\tuvScaleMap = material.specularMap;\n\n\t\t\t\t} else if ( material.displacementMap ) {\n\n\t\t\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t\t\t} else if ( material.normalMap ) {\n\n\t\t\t\t\tuvScaleMap = material.normalMap;\n\n\t\t\t\t} else if ( material.bumpMap ) {\n\n\t\t\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t\t\t} else if ( material.glossinessMap ) {\n\n\t\t\t\t\tuvScaleMap = material.glossinessMap;\n\n\t\t\t\t} else if ( material.alphaMap ) {\n\n\t\t\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t\t\t} else if ( material.emissiveMap ) {\n\n\t\t\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t\t\t}\n\n\t\t\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t\t\t// backwards compatibility\n\t\t\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t\t\t}\n\n\t\t\t\tuniforms.envMap.value = material.envMap;\n\t\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\t\t\t\tuniforms.flipEnvMap.value = ( material.envMap && material.envMap.isCubeTexture ) ? - 1 : 1;\n\n\t\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\t\tuniforms.specular.value.copy( material.specular );\n\t\t\t\tuniforms.glossiness.value = material.glossiness;\n\n\t\t\t\tuniforms.glossinessMap.value = material.glossinessMap;\n\n\t\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t\tif ( uniforms.glossinessMap.value !== null && defines.USE_GLOSSINESSMAP === undefined ) {\n\n\t\t\t\t\tdefines.USE_GLOSSINESSMAP = '';\n\t\t\t\t\t// set USE_ROUGHNESSMAP to enable vUv\n\t\t\t\t\tdefines.USE_ROUGHNESSMAP = '';\n\n\t\t\t\t}\n\n\t\t\t\tif ( uniforms.glossinessMap.value === null && defines.USE_GLOSSINESSMAP !== undefined ) {\n\n\t\t\t\t\tdelete defines.USE_GLOSSINESSMAP;\n\t\t\t\t\tdelete defines.USE_ROUGHNESSMAP;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t/*********************************/\n\t/********** INTERPOLATION ********/\n\t/*********************************/\n\n\t// Spline Interpolation\n\t// Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation\n\tfunction GLTFCubicSplineInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tTHREE.Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tGLTFCubicSplineInterpolant.prototype = Object.create( THREE.Interpolant.prototype );\n\tGLTFCubicSplineInterpolant.prototype.constructor = GLTFCubicSplineInterpolant;\n\n\tGLTFCubicSplineInterpolant.prototype.interpolate_ = function ( i1, t0, t, t1 ) {\n\n\t\tvar result = this.resultBuffer;\n\t\tvar values = this.sampleValues;\n\t\tvar stride = this.valueSize;\n\n\t\tvar stride2 = stride * 2;\n\t\tvar stride3 = stride * 3;\n\n\t\tvar td = t1 - t0;\n\n\t\tvar p = ( t - t0 ) / td;\n\t\tvar pp = p * p;\n\t\tvar ppp = pp * p;\n\n\t\tvar offset1 = i1 * stride3;\n\t\tvar offset0 = offset1 - stride3;\n\n\t\tvar s0 = 2 * ppp - 3 * pp + 1;\n\t\tvar s1 = ppp - 2 * pp + p;\n\t\tvar s2 = - 2 * ppp + 3 * pp;\n\t\tvar s3 = ppp - pp;\n\n\t\t// Layout of keyframe output values for CUBICSPLINE animations:\n\t\t// [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]\n\t\tfor ( var i = 0; i !== stride; i ++ ) {\n\n\t\t\tvar p0 = values[ offset0 + i + stride ]; // splineVertex_k\n\t\t\tvar m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k)\n\t\t\tvar p1 = values[ offset1 + i + stride ]; // splineVertex_k+1\n\t\t\tvar m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k)\n\n\t\t\tresult[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n\n\t\t}\n\n\t\treturn result;\n\n\t};\n\n\t/*********************************/\n\t/********** INTERNALS ************/\n\t/*********************************/\n\n\t/* CONSTANTS */\n\n\tvar WEBGL_CONSTANTS = {\n\t\tFLOAT: 5126,\n\t\t//FLOAT_MAT2: 35674,\n\t\tFLOAT_MAT3: 35675,\n\t\tFLOAT_MAT4: 35676,\n\t\tFLOAT_VEC2: 35664,\n\t\tFLOAT_VEC3: 35665,\n\t\tFLOAT_VEC4: 35666,\n\t\tLINEAR: 9729,\n\t\tREPEAT: 10497,\n\t\tSAMPLER_2D: 35678,\n\t\tPOINTS: 0,\n\t\tLINES: 1,\n\t\tLINE_LOOP: 2,\n\t\tLINE_STRIP: 3,\n\t\tTRIANGLES: 4,\n\t\tTRIANGLE_STRIP: 5,\n\t\tTRIANGLE_FAN: 6,\n\t\tUNSIGNED_BYTE: 5121,\n\t\tUNSIGNED_SHORT: 5123\n\t};\n\n\tvar WEBGL_TYPE = {\n\t\t5126: Number,\n\t\t//35674: THREE.Matrix2,\n\t\t35675: THREE.Matrix3,\n\t\t35676: THREE.Matrix4,\n\t\t35664: THREE.Vector2,\n\t\t35665: THREE.Vector3,\n\t\t35666: THREE.Vector4,\n\t\t35678: THREE.Texture\n\t};\n\n\tvar WEBGL_COMPONENT_TYPES = {\n\t\t5120: Int8Array,\n\t\t5121: Uint8Array,\n\t\t5122: Int16Array,\n\t\t5123: Uint16Array,\n\t\t5125: Uint32Array,\n\t\t5126: Float32Array\n\t};\n\n\tvar WEBGL_FILTERS = {\n\t\t9728: THREE.NearestFilter,\n\t\t9729: THREE.LinearFilter,\n\t\t9984: THREE.NearestMipMapNearestFilter,\n\t\t9985: THREE.LinearMipMapNearestFilter,\n\t\t9986: THREE.NearestMipMapLinearFilter,\n\t\t9987: THREE.LinearMipMapLinearFilter\n\t};\n\n\tvar WEBGL_WRAPPINGS = {\n\t\t33071: THREE.ClampToEdgeWrapping,\n\t\t33648: THREE.MirroredRepeatWrapping,\n\t\t10497: THREE.RepeatWrapping\n\t};\n\n\tvar WEBGL_TEXTURE_FORMATS = {\n\t\t6406: THREE.AlphaFormat,\n\t\t6407: THREE.RGBFormat,\n\t\t6408: THREE.RGBAFormat,\n\t\t6409: THREE.LuminanceFormat,\n\t\t6410: THREE.LuminanceAlphaFormat\n\t};\n\n\tvar WEBGL_TEXTURE_DATATYPES = {\n\t\t5121: THREE.UnsignedByteType,\n\t\t32819: THREE.UnsignedShort4444Type,\n\t\t32820: THREE.UnsignedShort5551Type,\n\t\t33635: THREE.UnsignedShort565Type\n\t};\n\n\tvar WEBGL_SIDES = {\n\t\t1028: THREE.BackSide, // Culling front\n\t\t1029: THREE.FrontSide // Culling back\n\t\t//1032: THREE.NoSide // Culling front and back, what to do?\n\t};\n\n\tvar WEBGL_DEPTH_FUNCS = {\n\t\t512: THREE.NeverDepth,\n\t\t513: THREE.LessDepth,\n\t\t514: THREE.EqualDepth,\n\t\t515: THREE.LessEqualDepth,\n\t\t516: THREE.GreaterEqualDepth,\n\t\t517: THREE.NotEqualDepth,\n\t\t518: THREE.GreaterEqualDepth,\n\t\t519: THREE.AlwaysDepth\n\t};\n\n\tvar WEBGL_BLEND_EQUATIONS = {\n\t\t32774: THREE.AddEquation,\n\t\t32778: THREE.SubtractEquation,\n\t\t32779: THREE.ReverseSubtractEquation\n\t};\n\n\tvar WEBGL_BLEND_FUNCS = {\n\t\t0: THREE.ZeroFactor,\n\t\t1: THREE.OneFactor,\n\t\t768: THREE.SrcColorFactor,\n\t\t769: THREE.OneMinusSrcColorFactor,\n\t\t770: THREE.SrcAlphaFactor,\n\t\t771: THREE.OneMinusSrcAlphaFactor,\n\t\t772: THREE.DstAlphaFactor,\n\t\t773: THREE.OneMinusDstAlphaFactor,\n\t\t774: THREE.DstColorFactor,\n\t\t775: THREE.OneMinusDstColorFactor,\n\t\t776: THREE.SrcAlphaSaturateFactor\n\t\t// The followings are not supported by Three.js yet\n\t\t//32769: CONSTANT_COLOR,\n\t\t//32770: ONE_MINUS_CONSTANT_COLOR,\n\t\t//32771: CONSTANT_ALPHA,\n\t\t//32772: ONE_MINUS_CONSTANT_COLOR\n\t};\n\n\tvar WEBGL_TYPE_SIZES = {\n\t\t'SCALAR': 1,\n\t\t'VEC2': 2,\n\t\t'VEC3': 3,\n\t\t'VEC4': 4,\n\t\t'MAT2': 4,\n\t\t'MAT3': 9,\n\t\t'MAT4': 16\n\t};\n\n\tvar ATTRIBUTES = {\n\t\tPOSITION: 'position',\n\t\tNORMAL: 'normal',\n\t\tTEXCOORD_0: 'uv',\n\t\tTEXCOORD0: 'uv', // deprecated\n\t\tTEXCOORD: 'uv', // deprecated\n\t\tTEXCOORD_1: 'uv2',\n\t\tCOLOR_0: 'color',\n\t\tCOLOR0: 'color', // deprecated\n\t\tCOLOR: 'color', // deprecated\n\t\tWEIGHTS_0: 'skinWeight',\n\t\tWEIGHT: 'skinWeight', // deprecated\n\t\tJOINTS_0: 'skinIndex',\n\t\tJOINT: 'skinIndex' // deprecated\n\t};\n\n\tvar PATH_PROPERTIES = {\n\t\tscale: 'scale',\n\t\ttranslation: 'position',\n\t\trotation: 'quaternion',\n\t\tweights: 'morphTargetInfluences'\n\t};\n\n\tvar INTERPOLATION = {\n\t\tCUBICSPLINE: THREE.InterpolateSmooth, // We use custom interpolation GLTFCubicSplineInterpolation for CUBICSPLINE.\n\t\t // KeyframeTrack.optimize() can't handle glTF Cubic Spline output values layout,\n\t\t // using THREE.InterpolateSmooth for KeyframeTrack instantiation to prevent optimization.\n\t\t // See KeyframeTrack.optimize() for the detail.\n\t\tLINEAR: THREE.InterpolateLinear,\n\t\tSTEP: THREE.InterpolateDiscrete\n\t};\n\n\tvar STATES_ENABLES = {\n\t\t2884: 'CULL_FACE',\n\t\t2929: 'DEPTH_TEST',\n\t\t3042: 'BLEND',\n\t\t3089: 'SCISSOR_TEST',\n\t\t32823: 'POLYGON_OFFSET_FILL',\n\t\t32926: 'SAMPLE_ALPHA_TO_COVERAGE'\n\t};\n\n\tvar ALPHA_MODES = {\n\t\tOPAQUE: 'OPAQUE',\n\t\tMASK: 'MASK',\n\t\tBLEND: 'BLEND'\n\t};\n\n\t/* UTILITY FUNCTIONS */\n\n\tfunction resolveURL( url, path ) {\n\n\t\t// Invalid URL\n\t\tif ( typeof url !== 'string' || url === '' ) return '';\n\n\t\t// Absolute URL http://,https://,//\n\t\tif ( /^(https?:)?\\/\\//i.test( url ) ) return url;\n\n\t\t// Data URI\n\t\tif ( /^data:.*,.*$/i.test( url ) ) return url;\n\n\t\t// Blob URL\n\t\tif ( /^blob:.*$/i.test( url ) ) return url;\n\n\t\t// Relative URL\n\t\treturn path + url;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\n\t */\n\tfunction createDefaultMaterial() {\n\n\t\treturn new THREE.MeshStandardMaterial( {\n\t\t\tcolor: 0xFFFFFF,\n\t\t\temissive: 0x000000,\n\t\t\tmetalness: 1,\n\t\t\troughness: 1,\n\t\t\ttransparent: false,\n\t\t\tdepthTest: true,\n\t\t\tside: THREE.FrontSide\n\t\t} );\n\n\t}\n\n\tfunction addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {\n\n\t\t// Add unknown glTF extensions to an object's userData.\n\n\t\tfor ( var name in objectDef.extensions ) {\n\n\t\t\tif ( knownExtensions[ name ] === undefined ) {\n\n\t\t\t\tobject.userData.gltfExtensions = object.userData.gltfExtensions || {};\n\t\t\t\tobject.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\n\t *\n\t * @param {THREE.BufferGeometry} geometry\n\t * @param {Array<GLTF.Target>} targets\n\t * @param {Array<THREE.BufferAttribute>} accessors\n\t */\n\tfunction addMorphTargets( geometry, targets, accessors ) {\n\n\t\tvar hasMorphPosition = false;\n\t\tvar hasMorphNormal = false;\n\n\t\tfor ( var i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tvar target = targets[ i ];\n\n\t\t\tif ( target.POSITION !== undefined ) hasMorphPosition = true;\n\t\t\tif ( target.NORMAL !== undefined ) hasMorphNormal = true;\n\n\t\t\tif ( hasMorphPosition && hasMorphNormal ) break;\n\n\t\t}\n\n\t\tif ( ! hasMorphPosition && ! hasMorphNormal ) return;\n\n\t\tvar morphPositions = [];\n\t\tvar morphNormals = [];\n\n\t\tfor ( var i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tvar target = targets[ i ];\n\t\t\tvar attributeName = 'morphTarget' + i;\n\n\t\t\tif ( hasMorphPosition ) {\n\n\t\t\t\t// Three.js morph position is absolute value. The formula is\n\t\t\t\t// basePosition\n\t\t\t\t// + weight0 * ( morphPosition0 - basePosition )\n\t\t\t\t// + weight1 * ( morphPosition1 - basePosition )\n\t\t\t\t// ...\n\t\t\t\t// while the glTF one is relative\n\t\t\t\t// basePosition\n\t\t\t\t// + weight0 * glTFmorphPosition0\n\t\t\t\t// + weight1 * glTFmorphPosition1\n\t\t\t\t// ...\n\t\t\t\t// then we need to convert from relative to absolute here.\n\n\t\t\t\tif ( target.POSITION !== undefined ) {\n\n\t\t\t\t\t// Cloning not to pollute original accessor\n\t\t\t\t\tvar positionAttribute = cloneBufferAttribute( accessors[ target.POSITION ] );\n\t\t\t\t\tpositionAttribute.name = attributeName;\n\n\t\t\t\t\tvar position = geometry.attributes.position;\n\n\t\t\t\t\tfor ( var j = 0, jl = positionAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\tpositionAttribute.setXYZ(\n\t\t\t\t\t\t\tj,\n\t\t\t\t\t\t\tpositionAttribute.getX( j ) + position.getX( j ),\n\t\t\t\t\t\t\tpositionAttribute.getY( j ) + position.getY( j ),\n\t\t\t\t\t\t\tpositionAttribute.getZ( j ) + position.getZ( j )\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tpositionAttribute = geometry.attributes.position;\n\n\t\t\t\t}\n\n\t\t\t\tmorphPositions.push( positionAttribute );\n\n\t\t\t}\n\n\t\t\tif ( hasMorphNormal ) {\n\n\t\t\t\t// see target.POSITION's comment\n\n\t\t\t\tvar normalAttribute;\n\n\t\t\t\tif ( target.NORMAL !== undefined ) {\n\n\t\t\t\t\tvar normalAttribute = cloneBufferAttribute( accessors[ target.NORMAL ] );\n\t\t\t\t\tnormalAttribute.name = attributeName;\n\n\t\t\t\t\tvar normal = geometry.attributes.normal;\n\n\t\t\t\t\tfor ( var j = 0, jl = normalAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\tnormalAttribute.setXYZ(\n\t\t\t\t\t\t\tj,\n\t\t\t\t\t\t\tnormalAttribute.getX( j ) + normal.getX( j ),\n\t\t\t\t\t\t\tnormalAttribute.getY( j ) + normal.getY( j ),\n\t\t\t\t\t\t\tnormalAttribute.getZ( j ) + normal.getZ( j )\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnormalAttribute = geometry.attributes.normal;\n\n\t\t\t\t}\n\n\t\t\t\tmorphNormals.push( normalAttribute );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;\n\t\tif ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;\n\n\t}\n\n\t/**\n\t * @param {THREE.Mesh} mesh\n\t * @param {GLTF.Mesh} meshDef\n\t */\n\tfunction updateMorphTargets( mesh, meshDef ) {\n\n\t\tmesh.updateMorphTargets();\n\n\t\tif ( meshDef.weights !== undefined ) {\n\n\t\t\tfor ( var i = 0, il = meshDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\tmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// .extras has user-defined data, so check that .extras.targetNames is an array.\n\t\tif ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {\n\n\t\t\tvar targetNames = meshDef.extras.targetNames;\n\n\t\t\tif ( mesh.morphTargetInfluences.length === targetNames.length ) {\n\n\t\t\t\tmesh.morphTargetDictionary = {};\n\n\t\t\t\tfor ( var i = 0, il = targetNames.length; i < il; i ++ ) {\n\n\t\t\t\t\tmesh.morphTargetDictionary[ targetNames[ i ] ] = i;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction isPrimitiveEqual( a, b ) {\n\n\t\tif ( a.indices !== b.indices ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn isObjectEqual( a.attributes, b.attributes );\n\n\t}\n\n\tfunction isObjectEqual( a, b ) {\n\n\t\tif ( Object.keys( a ).length !== Object.keys( b ).length ) return false;\n\n\t\tfor ( var key in a ) {\n\n\t\t\tif ( a[ key ] !== b[ key ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction isArrayEqual( a, b ) {\n\n\t\tif ( a.length !== b.length ) return false;\n\n\t\tfor ( var i = 0, il = a.length; i < il; i ++ ) {\n\n\t\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction getCachedGeometry( cache, newPrimitive ) {\n\n\t\tfor ( var i = 0, il = cache.length; i < il; i ++ ) {\n\n\t\t\tvar cached = cache[ i ];\n\n\t\t\tif ( isPrimitiveEqual( cached.primitive, newPrimitive ) ) return cached.promise;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tfunction getCachedCombinedGeometry( cache, geometries ) {\n\n\t\tfor ( var i = 0, il = cache.length; i < il; i ++ ) {\n\n\t\t\tvar cached = cache[ i ];\n\n\t\t\tif ( isArrayEqual( geometries, cached.baseGeometries ) ) return cached.geometry;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tfunction getCachedMultiPassGeometry( cache, geometry, primitives ) {\n\n\t\tfor ( var i = 0, il = cache.length; i < il; i ++ ) {\n\n\t\t\tvar cached = cache[ i ];\n\n\t\t\tif ( geometry === cached.baseGeometry && isArrayEqual( primitives, cached.primitives ) ) return cached.geometry;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tfunction cloneBufferAttribute( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tvar count = attribute.count;\n\t\t\tvar itemSize = attribute.itemSize;\n\t\t\tvar array = attribute.array.slice( 0, count * itemSize );\n\n\t\t\tfor ( var i = 0; i < count; ++ i ) {\n\n\t\t\t\tarray[ i ] = attribute.getX( i );\n\t\t\t\tif ( itemSize >= 2 ) array[ i + 1 ] = attribute.getY( i );\n\t\t\t\tif ( itemSize >= 3 ) array[ i + 2 ] = attribute.getZ( i );\n\t\t\t\tif ( itemSize >= 4 ) array[ i + 3 ] = attribute.getW( i );\n\n\t\t\t}\n\n\t\t\treturn new THREE.BufferAttribute( array, itemSize, attribute.normalized );\n\n\t\t}\n\n\t\treturn attribute.clone();\n\n\t}\n\n\t/**\n\t * Checks if we can build a single Mesh with MultiMaterial from multiple primitives.\n\t * Returns true if all primitives use the same attributes/morphAttributes/mode\n\t * and also have index. Otherwise returns false.\n\t *\n\t * @param {Array<GLTF.Primitive>} primitives\n\t * @return {Boolean}\n\t */\n\tfunction isMultiPassGeometry( primitives ) {\n\n\t\tif ( primitives.length < 2 ) return false;\n\n\t\tvar primitive0 = primitives[ 0 ];\n\t\tvar targets0 = primitive0.targets || [];\n\n\t\tif ( primitive0.indices === undefined ) return false;\n\n\t\tfor ( var i = 1, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tvar primitive = primitives[ i ];\n\n\t\t\tif ( primitive0.mode !== primitive.mode ) return false;\n\t\t\tif ( primitive.indices === undefined ) return false;\n\t\t\tif ( ! isObjectEqual( primitive0.attributes, primitive.attributes ) ) return false;\n\n\t\t\tvar targets = primitive.targets || [];\n\n\t\t\tif ( targets0.length !== targets.length ) return false;\n\n\t\t\tfor ( var j = 0, jl = targets0.length; j < jl; j ++ ) {\n\n\t\t\t\tif ( ! isObjectEqual( targets0[ j ], targets[ j ] ) ) return false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/* GLTF PARSER */\n\n\tfunction GLTFParser( json, extensions, options ) {\n\n\t\tthis.json = json || {};\n\t\tthis.extensions = extensions || {};\n\t\tthis.options = options || {};\n\n\t\t// loader object cache\n\t\tthis.cache = new GLTFRegistry();\n\n\t\t// BufferGeometry caching\n\t\tthis.primitiveCache = [];\n\t\tthis.multiplePrimitivesCache = [];\n\t\tthis.multiPassGeometryCache = [];\n\n\t\tthis.textureLoader = new THREE.TextureLoader( this.options.manager );\n\t\tthis.textureLoader.setCrossOrigin( this.options.crossOrigin );\n\n\t\tthis.fileLoader = new THREE.FileLoader( this.options.manager );\n\t\tthis.fileLoader.setResponseType( 'arraybuffer' );\n\n\t}\n\n\tGLTFParser.prototype.parse = function ( onLoad, onError ) {\n\n\t\tvar json = this.json;\n\n\t\t// Clear the loader cache\n\t\tthis.cache.removeAll();\n\n\t\t// Mark the special nodes/meshes in json for efficient parse\n\t\tthis.markDefs();\n\n\t\t// Fire the callback on complete\n\t\tthis.getMultiDependencies( [\n\n\t\t\t'scene',\n\t\t\t'animation',\n\t\t\t'camera'\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tvar scenes = dependencies.scenes || [];\n\t\t\tvar scene = scenes[ json.scene || 0 ];\n\t\t\tvar animations = dependencies.animations || [];\n\t\t\tvar cameras = dependencies.cameras || [];\n\n\t\t\tonLoad( scene, scenes, cameras, animations, json );\n\n\t\t} ).catch( onError );\n\n\t};\n\n\t/**\n\t * Marks the special nodes/meshes in json for efficient parse.\n\t */\n\tGLTFParser.prototype.markDefs = function () {\n\n\t\tvar nodeDefs = this.json.nodes || [];\n\t\tvar skinDefs = this.json.skins || [];\n\t\tvar meshDefs = this.json.meshes || [];\n\n\t\tvar meshReferences = {};\n\t\tvar meshUses = {};\n\n\t\t// Nothing in the node definition indicates whether it is a Bone or an\n\t\t// Object3D. Use the skins' joint references to mark bones.\n\t\tfor ( var skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {\n\n\t\t\tvar joints = skinDefs[ skinIndex ].joints;\n\n\t\t\tfor ( var i = 0, il = joints.length; i < il; i ++ ) {\n\n\t\t\t\tnodeDefs[ joints[ i ] ].isBone = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Meshes can (and should) be reused by multiple nodes in a glTF asset. To\n\t\t// avoid having more than one THREE.Mesh with the same name, count\n\t\t// references and rename instances below.\n\t\t//\n\t\t// Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n\t\tfor ( var nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tvar nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tif ( meshReferences[ nodeDef.mesh ] === undefined ) {\n\n\t\t\t\t\tmeshReferences[ nodeDef.mesh ] = meshUses[ nodeDef.mesh ] = 0;\n\n\t\t\t\t}\n\n\t\t\t\tmeshReferences[ nodeDef.mesh ] ++;\n\n\t\t\t\t// Nothing in the mesh definition indicates whether it is\n\t\t\t\t// a SkinnedMesh or Mesh. Use the node's mesh reference\n\t\t\t\t// to mark SkinnedMesh if node has skin.\n\t\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\t\tmeshDefs[ nodeDef.mesh ].isSkinnedMesh = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.json.meshReferences = meshReferences;\n\t\tthis.json.meshUses = meshUses;\n\n\t};\n\n\t/**\n\t * Requests the specified dependency asynchronously, with caching.\n\t * @param {string} type\n\t * @param {number} index\n\t * @return {Promise<Object>}\n\t */\n\tGLTFParser.prototype.getDependency = function ( type, index ) {\n\n\t\tvar cacheKey = type + ':' + index;\n\t\tvar dependency = this.cache.get( cacheKey );\n\n\t\tif ( ! dependency ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'scene':\n\t\t\t\t\tdependency = this.loadScene( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'node':\n\t\t\t\t\tdependency = this.loadNode( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'mesh':\n\t\t\t\t\tdependency = this.loadMesh( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'accessor':\n\t\t\t\t\tdependency = this.loadAccessor( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bufferView':\n\t\t\t\t\tdependency = this.loadBufferView( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'buffer':\n\t\t\t\t\tdependency = this.loadBuffer( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'material':\n\t\t\t\t\tdependency = this.loadMaterial( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'texture':\n\t\t\t\t\tdependency = this.loadTexture( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'skin':\n\t\t\t\t\tdependency = this.loadSkin( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'animation':\n\t\t\t\t\tdependency = this.loadAnimation( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'camera':\n\t\t\t\t\tdependency = this.loadCamera( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'Unknown type: ' + type );\n\n\t\t\t}\n\n\t\t\tthis.cache.add( cacheKey, dependency );\n\n\t\t}\n\n\t\treturn dependency;\n\n\t};\n\n\t/**\n\t * Requests all dependencies of the specified type asynchronously, with caching.\n\t * @param {string} type\n\t * @return {Promise<Array<Object>>}\n\t */\n\tGLTFParser.prototype.getDependencies = function ( type ) {\n\n\t\tvar dependencies = this.cache.get( type );\n\n\t\tif ( ! dependencies ) {\n\n\t\t\tvar parser = this;\n\t\t\tvar defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];\n\n\t\t\tdependencies = Promise.all( defs.map( function ( def, index ) {\n\n\t\t\t\treturn parser.getDependency( type, index );\n\n\t\t\t} ) );\n\n\t\t\tthis.cache.add( type, dependencies );\n\n\t\t}\n\n\t\treturn dependencies;\n\n\t};\n\n\t/**\n\t * Requests all multiple dependencies of the specified types asynchronously, with caching.\n\t * @param {Array<string>} types\n\t * @return {Promise<Object<Array<Object>>>}\n\t */\n\tGLTFParser.prototype.getMultiDependencies = function ( types ) {\n\n\t\tvar results = {};\n\t\tvar pendings = [];\n\n\t\tfor ( var i = 0, il = types.length; i < il; i ++ ) {\n\n\t\t\tvar type = types[ i ];\n\t\t\tvar value = this.getDependencies( type );\n\n\t\t\tvalue = value.then( function ( key, value ) {\n\n\t\t\t\tresults[ key ] = value;\n\n\t\t\t}.bind( this, type + ( type === 'mesh' ? 'es' : 's' ) ) );\n\n\t\t\tpendings.push( value );\n\n\t\t}\n\n\t\treturn Promise.all( pendings ).then( function () {\n\n\t\t\treturn results;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferIndex\n\t * @return {Promise<ArrayBuffer>}\n\t */\n\tGLTFParser.prototype.loadBuffer = function ( bufferIndex ) {\n\n\t\tvar bufferDef = this.json.buffers[ bufferIndex ];\n\t\tvar loader = this.fileLoader;\n\n\t\tif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );\n\n\t\t}\n\n\t\t// If present, GLB container is required to be the first buffer.\n\t\tif ( bufferDef.uri === undefined && bufferIndex === 0 ) {\n\n\t\t\treturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );\n\n\t\t}\n\n\t\tvar options = this.options;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tloader.load( resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {\n\n\t\t\t\treject( new Error( 'THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".' ) );\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferViewIndex\n\t * @return {Promise<ArrayBuffer>}\n\t */\n\tGLTFParser.prototype.loadBufferView = function ( bufferViewIndex ) {\n\n\t\tvar bufferViewDef = this.json.bufferViews[ bufferViewIndex ];\n\n\t\treturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {\n\n\t\t\tvar byteLength = bufferViewDef.byteLength || 0;\n\t\t\tvar byteOffset = bufferViewDef.byteOffset || 0;\n\t\t\treturn buffer.slice( byteOffset, byteOffset + byteLength );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n\t * @param {number} accessorIndex\n\t * @return {Promise<THREE.BufferAttribute|THREE.InterleavedBufferAttribute>}\n\t */\n\tGLTFParser.prototype.loadAccessor = function ( accessorIndex ) {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\n\t\tvar accessorDef = this.json.accessors[ accessorIndex ];\n\n\t\tif ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {\n\n\t\t\t// Ignore empty accessors, which may be used to declare runtime\n\t\t\t// information about attributes coming from another source (e.g. Draco\n\t\t\t// compression extension).\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar pendingBufferViews = [];\n\n\t\tif ( accessorDef.bufferView !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );\n\n\t\t} else {\n\n\t\t\tpendingBufferViews.push( null );\n\n\t\t}\n\n\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );\n\n\t\t}\n\n\t\treturn Promise.all( pendingBufferViews ).then( function ( bufferViews ) {\n\n\t\t\tvar bufferView = bufferViews[ 0 ];\n\n\t\t\tvar itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tvar TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n\t\t\tvar elementBytes = TypedArray.BYTES_PER_ELEMENT;\n\t\t\tvar itemBytes = elementBytes * itemSize;\n\t\t\tvar byteOffset = accessorDef.byteOffset || 0;\n\t\t\tvar byteStride = json.bufferViews[ accessorDef.bufferView ].byteStride;\n\t\t\tvar normalized = accessorDef.normalized === true;\n\t\t\tvar array, bufferAttribute;\n\n\t\t\t// The buffer is not interleaved if the stride is the item size in bytes.\n\t\t\tif ( byteStride && byteStride !== itemBytes ) {\n\n\t\t\t\tvar ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType;\n\t\t\t\tvar ib = parser.cache.get( ibCacheKey );\n\n\t\t\t\tif ( ! ib ) {\n\n\t\t\t\t\t// Use the full buffer if it's interleaved.\n\t\t\t\t\tarray = new TypedArray( bufferView );\n\n\t\t\t\t\t// Integer parameters to IB/IBA are in array elements, not bytes.\n\t\t\t\t\tib = new THREE.InterleavedBuffer( array, byteStride / elementBytes );\n\n\t\t\t\t\tparser.cache.add( ibCacheKey, ib );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new THREE.InterleavedBufferAttribute( ib, itemSize, byteOffset / elementBytes, normalized );\n\n\t\t\t} else {\n\n\t\t\t\tif ( bufferView === null ) {\n\n\t\t\t\t\tarray = new TypedArray( accessorDef.count * itemSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new THREE.BufferAttribute( array, itemSize, normalized );\n\n\t\t\t}\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors\n\t\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\t\tvar itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n\t\t\t\tvar TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];\n\n\t\t\t\tvar byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n\t\t\t\tvar byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n\n\t\t\t\tvar sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );\n\t\t\t\tvar sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );\n\n\t\t\t\tif ( bufferView !== null ) {\n\n\t\t\t\t\t// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.\n\t\t\t\t\tbufferAttribute.setArray( bufferAttribute.array.slice() );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var i = 0, il = sparseIndices.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar index = sparseIndices[ i ];\n\n\t\t\t\t\tbufferAttribute.setX( index, sparseValues[ i * itemSize ] );\n\t\t\t\t\tif ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );\n\t\t\t\t\tif ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );\n\t\t\t\t\tif ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );\n\t\t\t\t\tif ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn bufferAttribute;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n\t * @param {number} textureIndex\n\t * @return {Promise<THREE.Texture>}\n\t */\n\tGLTFParser.prototype.loadTexture = function ( textureIndex ) {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\t\tvar options = this.options;\n\t\tvar textureLoader = this.textureLoader;\n\n\t\tvar URL = window.URL || window.webkitURL;\n\n\t\tvar textureDef = json.textures[ textureIndex ];\n\n\t\tvar textureExtensions = textureDef.extensions || {};\n\n\t\tvar source;\n\n\t\tif ( textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] ) {\n\n\t\t\tsource = json.images[ textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].source ];\n\n\t\t} else {\n\n\t\t\tsource = json.images[ textureDef.source ];\n\n\t\t}\n\n\t\tvar sourceURI = source.uri;\n\t\tvar isObjectURL = false;\n\n\t\tif ( source.bufferView !== undefined ) {\n\n\t\t\t// Load binary image data from bufferView, if provided.\n\n\t\t\tsourceURI = parser.getDependency( 'bufferView', source.bufferView ).then( function ( bufferView ) {\n\n\t\t\t\tisObjectURL = true;\n\t\t\t\tvar blob = new Blob( [ bufferView ], { type: source.mimeType } );\n\t\t\t\tsourceURI = URL.createObjectURL( blob );\n\t\t\t\treturn sourceURI;\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn Promise.resolve( sourceURI ).then( function ( sourceURI ) {\n\n\t\t\t// Load Texture resource.\n\n\t\t\tvar loader = THREE.Loader.Handlers.get( sourceURI );\n\n\t\t\tif ( ! loader ) {\n\n\t\t\t\tloader = textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ]\n\t\t\t\t\t? parser.extensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].ddsLoader\n\t\t\t\t\t: textureLoader;\n\n\t\t\t}\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tloader.load( resolveURL( sourceURI, options.path ), resolve, undefined, reject );\n\n\t\t\t} );\n\n\t\t} ).then( function ( texture ) {\n\n\t\t\t// Clean up resources and configure Texture.\n\n\t\t\tif ( isObjectURL === true ) {\n\n\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t}\n\n\t\t\ttexture.flipY = false;\n\n\t\t\tif ( textureDef.name !== undefined ) texture.name = textureDef.name;\n\n\t\t\t// .format of dds texture is set in DDSLoader\n\t\t\tif ( ! textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] ) {\n\n\t\t\t\ttexture.format = textureDef.format !== undefined ? WEBGL_TEXTURE_FORMATS[ textureDef.format ] : THREE.RGBAFormat;\n\n\t\t\t}\n\n\t\t\tif ( textureDef.internalFormat !== undefined && texture.format !== WEBGL_TEXTURE_FORMATS[ textureDef.internalFormat ] ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Three.js does not support texture internalFormat which is different from texture format. ' +\n\t\t\t\t\t\t\t\t\t\t\t'internalFormat will be forced to be the same value as format.' );\n\n\t\t\t}\n\n\t\t\ttexture.type = textureDef.type !== undefined ? WEBGL_TEXTURE_DATATYPES[ textureDef.type ] : THREE.UnsignedByteType;\n\n\t\t\tvar samplers = json.samplers || {};\n\t\t\tvar sampler = samplers[ textureDef.sampler ] || {};\n\n\t\t\ttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || THREE.LinearFilter;\n\t\t\ttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || THREE.LinearMipMapLinearFilter;\n\t\t\ttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || THREE.RepeatWrapping;\n\t\t\ttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || THREE.RepeatWrapping;\n\n\t\t\treturn texture;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Asynchronously assigns a texture to the given material parameters.\n\t * @param {Object} materialParams\n\t * @param {string} textureName\n\t * @param {number} textureIndex\n\t * @return {Promise}\n\t */\n\tGLTFParser.prototype.assignTexture = function ( materialParams, textureName, textureIndex ) {\n\n\t\treturn this.getDependency( 'texture', textureIndex ).then( function ( texture ) {\n\n\t\t\tmaterialParams[ textureName ] = texture;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n\t * @param {number} materialIndex\n\t * @return {Promise<THREE.Material>}\n\t */\n\tGLTFParser.prototype.loadMaterial = function ( materialIndex ) {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\t\tvar extensions = this.extensions;\n\t\tvar materialDef = this.json.materials[ materialIndex ];\n\n\t\tvar materialType;\n\t\tvar materialParams = {};\n\t\tvar materialExtensions = materialDef.extensions || {};\n\n\t\tvar pending = [];\n\n\t\tif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] ) {\n\n\t\t\tvar sgExtension = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ];\n\t\t\tmaterialType = sgExtension.getMaterialType( materialDef );\n\t\t\tpending.push( sgExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {\n\n\t\t\tvar kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];\n\t\t\tmaterialType = kmuExtension.getMaterialType( materialDef );\n\t\t\tpending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else {\n\n\t\t\t// Specification:\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n\n\t\t\tmaterialType = THREE.MeshStandardMaterial;\n\n\t\t\tvar metallicRoughness = materialDef.pbrMetallicRoughness || {};\n\n\t\t\tmaterialParams.color = new THREE.Color( 1.0, 1.0, 1.0 );\n\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tvar array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture.index ) );\n\n\t\t\t}\n\n\t\t\tmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;\n\t\t\tmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;\n\n\t\t\tif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {\n\n\t\t\t\tvar textureIndex = metallicRoughness.metallicRoughnessTexture.index;\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'metalnessMap', textureIndex ) );\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'roughnessMap', textureIndex ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.doubleSided === true ) {\n\n\t\t\tmaterialParams.side = THREE.DoubleSide;\n\n\t\t}\n\n\t\tvar alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n\n\t\tif ( alphaMode === ALPHA_MODES.BLEND ) {\n\n\t\t\tmaterialParams.transparent = true;\n\n\t\t} else {\n\n\t\t\tmaterialParams.transparent = false;\n\n\t\t\tif ( alphaMode === ALPHA_MODES.MASK ) {\n\n\t\t\t\tmaterialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.normalTexture !== undefined && materialType !== THREE.MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture.index ) );\n\n\t\t\tmaterialParams.normalScale = new THREE.Vector2( 1, 1 );\n\n\t\t\tif ( materialDef.normalTexture.scale !== undefined ) {\n\n\t\t\t\tmaterialParams.normalScale.set( materialDef.normalTexture.scale, materialDef.normalTexture.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.occlusionTexture !== undefined && materialType !== THREE.MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture.index ) );\n\n\t\t\tif ( materialDef.occlusionTexture.strength !== undefined ) {\n\n\t\t\t\tmaterialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.emissiveFactor !== undefined && materialType !== THREE.MeshBasicMaterial ) {\n\n\t\t\tmaterialParams.emissive = new THREE.Color().fromArray( materialDef.emissiveFactor );\n\n\t\t}\n\n\t\tif ( materialDef.emissiveTexture !== undefined && materialType !== THREE.MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture.index ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\tvar material;\n\n\t\t\tif ( materialType === THREE.ShaderMaterial ) {\n\n\t\t\t\tmaterial = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].createMaterial( materialParams );\n\n\t\t\t} else {\n\n\t\t\t\tmaterial = new materialType( materialParams );\n\n\t\t\t}\n\n\t\t\tif ( materialDef.name !== undefined ) material.name = materialDef.name;\n\n\t\t\t// Normal map textures use OpenGL conventions:\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#materialnormaltexture\n\t\t\tif ( material.normalScale ) {\n\n\t\t\t\tmaterial.normalScale.y = - material.normalScale.y;\n\n\t\t\t}\n\n\t\t\t// baseColorTexture, emissiveTexture, and specularGlossinessTexture use sRGB encoding.\n\t\t\tif ( material.map ) material.map.encoding = THREE.sRGBEncoding;\n\t\t\tif ( material.emissiveMap ) material.emissiveMap.encoding = THREE.sRGBEncoding;\n\t\t\tif ( material.specularMap ) material.specularMap.encoding = THREE.sRGBEncoding;\n\n\t\t\tif ( materialDef.extras ) material.userData = materialDef.extras;\n\n\t\t\tif ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );\n\n\t\t\treturn material;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * @param {THREE.BufferGeometry} geometry\n\t * @param {GLTF.Primitive} primitiveDef\n\t * @param {Array<THREE.BufferAttribute>} accessors\n\t */\n\tfunction addPrimitiveAttributes( geometry, primitiveDef, accessors ) {\n\n\t\tvar attributes = primitiveDef.attributes;\n\n\t\tfor ( var gltfAttributeName in attributes ) {\n\n\t\t\tvar threeAttributeName = ATTRIBUTES[ gltfAttributeName ];\n\t\t\tvar bufferAttribute = accessors[ attributes[ gltfAttributeName ] ];\n\n\t\t\t// Skip attributes already provided by e.g. Draco extension.\n\t\t\tif ( ! threeAttributeName ) continue;\n\t\t\tif ( threeAttributeName in geometry.attributes ) continue;\n\n\t\t\tgeometry.addAttribute( threeAttributeName, bufferAttribute );\n\n\t\t}\n\n\t\tif ( primitiveDef.indices !== undefined && ! geometry.index ) {\n\n\t\t\tgeometry.setIndex( accessors[ primitiveDef.indices ] );\n\n\t\t}\n\n\t\tif ( primitiveDef.targets !== undefined ) {\n\n\t\t\taddMorphTargets( geometry, primitiveDef.targets, accessors );\n\n\t\t}\n\n\t\tif ( primitiveDef.extras !== undefined ) {\n\n\t\t\tgeometry.userData = primitiveDef.extras;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n\t *\n\t * Creates BufferGeometries from primitives.\n\t * If we can build a single BufferGeometry with .groups from multiple primitives, returns one BufferGeometry.\n\t * Otherwise, returns BufferGeometries without .groups as many as primitives.\n\t *\n\t * @param {Array<Object>} primitives\n\t * @return {Promise<Array<THREE.BufferGeometry>>}\n\t */\n\tGLTFParser.prototype.loadGeometries = function ( primitives ) {\n\n\t\tvar parser = this;\n\t\tvar extensions = this.extensions;\n\t\tvar cache = this.primitiveCache;\n\n\t\tvar isMultiPass = isMultiPassGeometry( primitives );\n\t\tvar originalPrimitives;\n\n\t\tif ( isMultiPass ) {\n\n\t\t\toriginalPrimitives = primitives; // save original primitives and use later\n\n\t\t\t// We build a single BufferGeometry with .groups from multiple primitives\n\t\t\t// because all primitives share the same attributes/morph/mode and have indices.\n\n\t\t\tprimitives = [ primitives[ 0 ] ];\n\n\t\t\t// Sets .groups and combined indices to a geometry later in this method.\n\n\t\t}\n\n\t\treturn this.getDependencies( 'accessor' ).then( function ( accessors ) {\n\n\t\t\tvar pending = [];\n\n\t\t\tfor ( var i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\t\tvar primitive = primitives[ i ];\n\n\t\t\t\t// See if we've already created this geometry\n\t\t\t\tvar cached = getCachedGeometry( cache, primitive );\n\n\t\t\t\tif ( cached ) {\n\n\t\t\t\t\t// Use the cached geometry if it exists\n\t\t\t\t\tpending.push( cached );\n\n\t\t\t\t} else if ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {\n\n\t\t\t\t\t// Use DRACO geometry if available\n\t\t\t\t\tvar geometryPromise = extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]\n\t\t\t\t\t\t.decodePrimitive( primitive, parser )\n\t\t\t\t\t\t.then( function ( geometry ) {\n\n\t\t\t\t\t\t\taddPrimitiveAttributes( geometry, primitive, accessors );\n\n\t\t\t\t\t\t\treturn geometry;\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\tcache.push( { primitive: primitive, promise: geometryPromise } );\n\n\t\t\t\t\tpending.push( geometryPromise );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise create a new geometry\n\t\t\t\t\tvar geometry = new THREE.BufferGeometry();\n\n\t\t\t\t\taddPrimitiveAttributes( geometry, primitive, accessors );\n\n\t\t\t\t\tvar geometryPromise = Promise.resolve( geometry );\n\n\t\t\t\t\t// Cache this geometry\n\t\t\t\t\tcache.push( { primitive: primitive, promise: geometryPromise } );\n\n\t\t\t\t\tpending.push( geometryPromise );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn Promise.all( pending ).then( function ( geometries ) {\n\n\t\t\t\tif ( isMultiPass ) {\n\n\t\t\t\t\tvar baseGeometry = geometries[ 0 ];\n\n\t\t\t\t\t// See if we've already created this combined geometry\n\t\t\t\t\tvar cache = parser.multiPassGeometryCache;\n\t\t\t\t\tvar cached = getCachedMultiPassGeometry( cache, baseGeometry, originalPrimitives );\n\n\t\t\t\t\tif ( cached !== null ) return [ cached.geometry ];\n\n\t\t\t\t\t// Cloning geometry because of index override.\n\t\t\t\t\t// Attributes can be reused so cloning by myself here.\n\t\t\t\t\tvar geometry = new THREE.BufferGeometry();\n\n\t\t\t\t\tgeometry.name = baseGeometry.name;\n\t\t\t\t\tgeometry.userData = baseGeometry.userData;\n\n\t\t\t\t\tfor ( var key in baseGeometry.attributes ) geometry.addAttribute( key, baseGeometry.attributes[ key ] );\n\t\t\t\t\tfor ( var key in baseGeometry.morphAttributes ) geometry.morphAttributes[ key ] = baseGeometry.morphAttributes[ key ];\n\n\t\t\t\t\tvar indices = [];\n\t\t\t\t\tvar offset = 0;\n\n\t\t\t\t\tfor ( var i = 0, il = originalPrimitives.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar accessor = accessors[ originalPrimitives[ i ].indices ];\n\n\t\t\t\t\t\tfor ( var j = 0, jl = accessor.count; j < jl; j ++ ) indices.push( accessor.array[ j ] );\n\n\t\t\t\t\t\tgeometry.addGroup( offset, accessor.count, i );\n\n\t\t\t\t\t\toffset += accessor.count;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.setIndex( indices );\n\n\t\t\t\t\tcache.push( { geometry: geometry, baseGeometry: baseGeometry, primitives: originalPrimitives } );\n\n\t\t\t\t\treturn [ geometry ];\n\n\t\t\t\t} else if ( geometries.length > 1 && THREE.BufferGeometryUtils !== undefined ) {\n\n\t\t\t\t\t// Tries to merge geometries with BufferGeometryUtils if possible\n\n\t\t\t\t\tfor ( var i = 1, il = primitives.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t// can't merge if draw mode is different\n\t\t\t\t\t\tif ( primitives[ 0 ].mode !== primitives[ i ].mode ) return geometries;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// See if we've already created this combined geometry\n\t\t\t\t\tvar cache = parser.multiplePrimitivesCache;\n\t\t\t\t\tvar cached = getCachedCombinedGeometry( cache, geometries );\n\n\t\t\t\t\tif ( cached ) {\n\n\t\t\t\t\t\tif ( cached.geometry !== null ) return [ cached.geometry ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar geometry = THREE.BufferGeometryUtils.mergeBufferGeometries( geometries, true );\n\n\t\t\t\t\t\tcache.push( { geometry: geometry, baseGeometries: geometries } );\n\n\t\t\t\t\t\tif ( geometry !== null ) return [ geometry ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn geometries;\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n\t * @param {number} meshIndex\n\t * @return {Promise<THREE.Group|THREE.Mesh|THREE.SkinnedMesh>}\n\t */\n\tGLTFParser.prototype.loadMesh = function ( meshIndex ) {\n\n\t\tvar scope = this;\n\t\tvar json = this.json;\n\t\tvar extensions = this.extensions;\n\n\t\tvar meshDef = this.json.meshes[ meshIndex ];\n\n\t\treturn this.getMultiDependencies( [\n\n\t\t\t'accessor',\n\t\t\t'material'\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tvar primitives = meshDef.primitives;\n\t\t\tvar originalMaterials = [];\n\n\t\t\tfor ( var i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\t\toriginalMaterials[ i ] = primitives[ i ].material === undefined\n\t\t\t\t\t? createDefaultMaterial()\n\t\t\t\t\t: dependencies.materials[ primitives[ i ].material ];\n\n\t\t\t}\n\n\t\t\treturn scope.loadGeometries( primitives ).then( function ( geometries ) {\n\n\t\t\t\tvar isMultiMaterial = geometries.length === 1 && geometries[ 0 ].groups.length > 0;\n\n\t\t\t\tvar meshes = [];\n\n\t\t\t\tfor ( var i = 0, il = geometries.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar geometry = geometries[ i ];\n\t\t\t\t\tvar primitive = primitives[ i ];\n\n\t\t\t\t\t// 1. create Mesh\n\n\t\t\t\t\tvar mesh;\n\n\t\t\t\t\tvar material = isMultiMaterial ? originalMaterials : originalMaterials[ i ];\n\n\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||\n\t\t\t\t\t\tprimitive.mode === undefined ) {\n\n\t\t\t\t\t\t// .isSkinnedMesh isn't in glTF spec. See .markDefs()\n\t\t\t\t\t\tmesh = meshDef.isSkinnedMesh === true\n\t\t\t\t\t\t\t? new THREE.SkinnedMesh( geometry, material )\n\t\t\t\t\t\t\t: new THREE.Mesh( geometry, material );\n\n\t\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {\n\n\t\t\t\t\t\t\tmesh.drawMode = THREE.TriangleStripDrawMode;\n\n\t\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {\n\n\t\t\t\t\t\t\tmesh.drawMode = THREE.TriangleFanDrawMode;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {\n\n\t\t\t\t\t\tmesh = new THREE.LineSegments( geometry, material );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {\n\n\t\t\t\t\t\tmesh = new THREE.Line( geometry, material );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {\n\n\t\t\t\t\t\tmesh = new THREE.LineLoop( geometry, material );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {\n\n\t\t\t\t\t\tmesh = new THREE.Points( geometry, material );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {\n\n\t\t\t\t\t\tupdateMorphTargets( mesh, meshDef );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmesh.name = meshDef.name || ( 'mesh_' + meshIndex );\n\n\t\t\t\t\tif ( geometries.length > 1 ) mesh.name += '_' + i;\n\n\t\t\t\t\tif ( meshDef.extras !== undefined ) mesh.userData = meshDef.extras;\n\n\t\t\t\t\tmeshes.push( mesh );\n\n\t\t\t\t\t// 2. update Material depending on Mesh and BufferGeometry\n\n\t\t\t\t\tvar materials = isMultiMaterial ? mesh.material : [ mesh.material ];\n\n\t\t\t\t\tvar useVertexColors = geometry.attributes.color !== undefined;\n\t\t\t\t\tvar useFlatShading = geometry.attributes.normal === undefined;\n\t\t\t\t\tvar useSkinning = mesh.isSkinnedMesh === true;\n\t\t\t\t\tvar useMorphTargets = Object.keys( geometry.morphAttributes ).length > 0;\n\t\t\t\t\tvar useMorphNormals = useMorphTargets && geometry.morphAttributes.normal !== undefined;\n\n\t\t\t\t\tfor ( var j = 0, jl = materials.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar material = materials[ j ];\n\n\t\t\t\t\t\tif ( mesh.isPoints ) {\n\n\t\t\t\t\t\t\tvar cacheKey = 'PointsMaterial:' + material.uuid;\n\n\t\t\t\t\t\t\tvar pointsMaterial = scope.cache.get( cacheKey );\n\n\t\t\t\t\t\t\tif ( ! pointsMaterial ) {\n\n\t\t\t\t\t\t\t\tpointsMaterial = new THREE.PointsMaterial();\n\t\t\t\t\t\t\t\tTHREE.Material.prototype.copy.call( pointsMaterial, material );\n\t\t\t\t\t\t\t\tpointsMaterial.color.copy( material.color );\n\t\t\t\t\t\t\t\tpointsMaterial.map = material.map;\n\t\t\t\t\t\t\t\tpointsMaterial.lights = false; // PointsMaterial doesn't support lights yet\n\n\t\t\t\t\t\t\t\tscope.cache.add( cacheKey, pointsMaterial );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tmaterial = pointsMaterial;\n\n\t\t\t\t\t\t} else if ( mesh.isLine ) {\n\n\t\t\t\t\t\t\tvar cacheKey = 'LineBasicMaterial:' + material.uuid;\n\n\t\t\t\t\t\t\tvar lineMaterial = scope.cache.get( cacheKey );\n\n\t\t\t\t\t\t\tif ( ! lineMaterial ) {\n\n\t\t\t\t\t\t\t\tlineMaterial = new THREE.LineBasicMaterial();\n\t\t\t\t\t\t\t\tTHREE.Material.prototype.copy.call( lineMaterial, material );\n\t\t\t\t\t\t\t\tlineMaterial.color.copy( material.color );\n\t\t\t\t\t\t\t\tlineMaterial.lights = false; // LineBasicMaterial doesn't support lights yet\n\n\t\t\t\t\t\t\t\tscope.cache.add( cacheKey, lineMaterial );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tmaterial = lineMaterial;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Clone the material if it will be modified\n\t\t\t\t\t\tif ( useVertexColors || useFlatShading || useSkinning || useMorphTargets ) {\n\n\t\t\t\t\t\t\tvar cacheKey = 'ClonedMaterial:' + material.uuid + ':';\n\n\t\t\t\t\t\t\tif ( material.isGLTFSpecularGlossinessMaterial ) cacheKey += 'specular-glossiness:';\n\t\t\t\t\t\t\tif ( useSkinning ) cacheKey += 'skinning:';\n\t\t\t\t\t\t\tif ( useVertexColors ) cacheKey += 'vertex-colors:';\n\t\t\t\t\t\t\tif ( useFlatShading ) cacheKey += 'flat-shading:';\n\t\t\t\t\t\t\tif ( useMorphTargets ) cacheKey += 'morph-targets:';\n\t\t\t\t\t\t\tif ( useMorphNormals ) cacheKey += 'morph-normals:';\n\n\t\t\t\t\t\t\tvar cachedMaterial = scope.cache.get( cacheKey );\n\n\t\t\t\t\t\t\tif ( ! cachedMaterial ) {\n\n\t\t\t\t\t\t\t\tcachedMaterial = material.isGLTFSpecularGlossinessMaterial\n\t\t\t\t\t\t\t\t\t? extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].cloneMaterial( material )\n\t\t\t\t\t\t\t\t\t: material.clone();\n\n\t\t\t\t\t\t\t\tif ( useSkinning ) cachedMaterial.skinning = true;\n\t\t\t\t\t\t\t\tif ( useVertexColors ) cachedMaterial.vertexColors = THREE.VertexColors;\n\t\t\t\t\t\t\t\tif ( useFlatShading ) cachedMaterial.flatShading = true;\n\t\t\t\t\t\t\t\tif ( useMorphTargets ) cachedMaterial.morphTargets = true;\n\t\t\t\t\t\t\t\tif ( useMorphNormals ) cachedMaterial.morphNormals = true;\n\n\t\t\t\t\t\t\t\tscope.cache.add( cacheKey, cachedMaterial );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tmaterial = cachedMaterial;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaterials[ j ] = material;\n\n\t\t\t\t\t\t// workarounds for mesh and geometry\n\n\t\t\t\t\t\tif ( material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined ) {\n\n\t\t\t\t\t\t\tconsole.log( 'THREE.GLTFLoader: Duplicating UVs to support aoMap.' );\n\t\t\t\t\t\t\tgeometry.addAttribute( 'uv2', new THREE.BufferAttribute( geometry.attributes.uv.array, 2 ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( material.isGLTFSpecularGlossinessMaterial ) {\n\n\t\t\t\t\t\t\t// for GLTFSpecularGlossinessMaterial(ShaderMaterial) uniforms runtime update\n\t\t\t\t\t\t\tmesh.onBeforeRender = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].refreshUniforms;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmesh.material = isMultiMaterial ? materials : materials[ 0 ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( meshes.length === 1 ) {\n\n\t\t\t\t\treturn meshes[ 0 ];\n\n\t\t\t\t}\n\n\t\t\t\tvar group = new THREE.Group();\n\n\t\t\t\tfor ( var i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn group;\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n\t * @param {number} cameraIndex\n\t * @return {Promise<THREE.Camera>}\n\t */\n\tGLTFParser.prototype.loadCamera = function ( cameraIndex ) {\n\n\t\tvar camera;\n\t\tvar cameraDef = this.json.cameras[ cameraIndex ];\n\t\tvar params = cameraDef[ cameraDef.type ];\n\n\t\tif ( ! params ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( cameraDef.type === 'perspective' ) {\n\n\t\t\tcamera = new THREE.PerspectiveCamera( THREE.Math.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );\n\n\t\t} else if ( cameraDef.type === 'orthographic' ) {\n\n\t\t\tcamera = new THREE.OrthographicCamera( params.xmag / - 2, params.xmag / 2, params.ymag / 2, params.ymag / - 2, params.znear, params.zfar );\n\n\t\t}\n\n\t\tif ( cameraDef.name !== undefined ) camera.name = cameraDef.name;\n\t\tif ( cameraDef.extras ) camera.userData = cameraDef.extras;\n\n\t\treturn Promise.resolve( camera );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n\t * @param {number} skinIndex\n\t * @return {Promise<Object>}\n\t */\n\tGLTFParser.prototype.loadSkin = function ( skinIndex ) {\n\n\t\tvar skinDef = this.json.skins[ skinIndex ];\n\n\t\tvar skinEntry = { joints: skinDef.joints };\n\n\t\tif ( skinDef.inverseBindMatrices === undefined ) {\n\n\t\t\treturn Promise.resolve( skinEntry );\n\n\t\t}\n\n\t\treturn this.getDependency( 'accessor', skinDef.inverseBindMatrices ).then( function ( accessor ) {\n\n\t\t\tskinEntry.inverseBindMatrices = accessor;\n\n\t\t\treturn skinEntry;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n\t * @param {number} animationIndex\n\t * @return {Promise<THREE.AnimationClip>}\n\t */\n\tGLTFParser.prototype.loadAnimation = function ( animationIndex ) {\n\n\t\tvar json = this.json;\n\n\t\tvar animationDef = this.json.animations[ animationIndex ];\n\n\t\treturn this.getMultiDependencies( [\n\n\t\t\t'accessor',\n\t\t\t'node'\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tvar tracks = [];\n\n\t\t\tfor ( var i = 0, il = animationDef.channels.length; i < il; i ++ ) {\n\n\t\t\t\tvar channel = animationDef.channels[ i ];\n\t\t\t\tvar sampler = animationDef.samplers[ channel.sampler ];\n\n\t\t\t\tif ( sampler ) {\n\n\t\t\t\t\tvar target = channel.target;\n\t\t\t\t\tvar name = target.node !== undefined ? target.node : target.id; // NOTE: target.id is deprecated.\n\t\t\t\t\tvar input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;\n\t\t\t\t\tvar output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;\n\n\t\t\t\t\tvar inputAccessor = dependencies.accessors[ input ];\n\t\t\t\t\tvar outputAccessor = dependencies.accessors[ output ];\n\n\t\t\t\t\tvar node = dependencies.nodes[ name ];\n\n\t\t\t\t\tif ( node ) {\n\n\t\t\t\t\t\tnode.updateMatrix();\n\t\t\t\t\t\tnode.matrixAutoUpdate = true;\n\n\t\t\t\t\t\tvar TypedKeyframeTrack;\n\n\t\t\t\t\t\tswitch ( PATH_PROPERTIES[ target.path ] ) {\n\n\t\t\t\t\t\t\tcase PATH_PROPERTIES.weights:\n\n\t\t\t\t\t\t\t\tTypedKeyframeTrack = THREE.NumberKeyframeTrack;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase PATH_PROPERTIES.rotation:\n\n\t\t\t\t\t\t\t\tTypedKeyframeTrack = THREE.QuaternionKeyframeTrack;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase PATH_PROPERTIES.position:\n\t\t\t\t\t\t\tcase PATH_PROPERTIES.scale:\n\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\tTypedKeyframeTrack = THREE.VectorKeyframeTrack;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar targetName = node.name ? node.name : node.uuid;\n\n\t\t\t\t\t\tvar interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : THREE.InterpolateLinear;\n\n\t\t\t\t\t\tvar targetNames = [];\n\n\t\t\t\t\t\tif ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {\n\n\t\t\t\t\t\t\t// node can be THREE.Group here but\n\t\t\t\t\t\t\t// PATH_PROPERTIES.weights(morphTargetInfluences) should be\n\t\t\t\t\t\t\t// the property of a mesh object under group.\n\n\t\t\t\t\t\t\tnode.traverse( function ( object ) {\n\n\t\t\t\t\t\t\t\tif ( object.isMesh === true && object.morphTargetInfluences ) {\n\n\t\t\t\t\t\t\t\t\ttargetNames.push( object.name ? object.name : object.uuid );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\ttargetNames.push( targetName );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// KeyframeTrack.optimize() will modify given 'times' and 'values'\n\t\t\t\t\t\t// buffers before creating a truncated copy to keep. Because buffers may\n\t\t\t\t\t\t// be reused by other tracks, make copies here.\n\t\t\t\t\t\tfor ( var j = 0, jl = targetNames.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tvar track = new TypedKeyframeTrack(\n\t\t\t\t\t\t\t\ttargetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],\n\t\t\t\t\t\t\t\tTHREE.AnimationUtils.arraySlice( inputAccessor.array, 0 ),\n\t\t\t\t\t\t\t\tTHREE.AnimationUtils.arraySlice( outputAccessor.array, 0 ),\n\t\t\t\t\t\t\t\tinterpolation\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// Here is the trick to enable custom interpolation.\n\t\t\t\t\t\t\t// Overrides .createInterpolant in a factory method which creates custom interpolation.\n\t\t\t\t\t\t\tif ( sampler.interpolation === 'CUBICSPLINE' ) {\n\n\t\t\t\t\t\t\t\ttrack.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {\n\n\t\t\t\t\t\t\t\t\t// A CUBICSPLINE keyframe in glTF has three output values for each input value,\n\t\t\t\t\t\t\t\t\t// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()\n\t\t\t\t\t\t\t\t\t// must be divided by three to get the interpolant's sampleSize argument.\n\n\t\t\t\t\t\t\t\t\treturn new GLTFCubicSplineInterpolant( this.times, this.values, this.getValueSize() / 3, result );\n\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Workaround, provide an alternate way to know if the interpolant type is cubis spline to track.\n\t\t\t\t\t\t\t\t// track.getInterpolation() doesn't return valid value for custom interpolant.\n\t\t\t\t\t\t\t\ttrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttracks.push( track );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar name = animationDef.name !== undefined ? animationDef.name : 'animation_' + animationIndex;\n\n\t\t\treturn new THREE.AnimationClip( name, undefined, tracks );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n\t * @param {number} nodeIndex\n\t * @return {Promise<THREE.Object3D>}\n\t */\n\tGLTFParser.prototype.loadNode = function ( nodeIndex ) {\n\n\t\tvar json = this.json;\n\t\tvar extensions = this.extensions;\n\n\t\tvar meshReferences = this.json.meshReferences;\n\t\tvar meshUses = this.json.meshUses;\n\n\t\tvar nodeDef = this.json.nodes[ nodeIndex ];\n\n\t\treturn this.getMultiDependencies( [\n\n\t\t\t'mesh',\n\t\t\t'skin',\n\t\t\t'camera',\n\t\t\t'light'\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tvar node;\n\n\t\t\t// .isBone isn't in glTF spec. See .markDefs\n\t\t\tif ( nodeDef.isBone === true ) {\n\n\t\t\t\tnode = new THREE.Bone();\n\n\t\t\t} else if ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tvar mesh = dependencies.meshes[ nodeDef.mesh ];\n\n\t\t\t\tnode = mesh.clone();\n\n\t\t\t\t// for Specular-Glossiness\n\t\t\t\tif ( mesh.isGroup === true ) {\n\n\t\t\t\t\tfor ( var i = 0, il = mesh.children.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar child = mesh.children[ i ];\n\n\t\t\t\t\t\tif ( child.material && child.material.isGLTFSpecularGlossinessMaterial === true ) {\n\n\t\t\t\t\t\t\tnode.children[ i ].onBeforeRender = child.onBeforeRender;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( mesh.material && mesh.material.isGLTFSpecularGlossinessMaterial === true ) {\n\n\t\t\t\t\t\tnode.onBeforeRender = mesh.onBeforeRender;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( meshReferences[ nodeDef.mesh ] > 1 ) {\n\n\t\t\t\t\tnode.name += '_instance_' + meshUses[ nodeDef.mesh ] ++;\n\n\t\t\t\t}\n\n\t\t\t} else if ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tnode = dependencies.cameras[ nodeDef.camera ];\n\n\t\t\t} else if ( nodeDef.extensions\n\t\t\t\t\t && nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS ]\n\t\t\t\t\t && nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS ].light !== undefined ) {\n\n\t\t\t\tvar lights = extensions[ EXTENSIONS.KHR_LIGHTS ].lights;\n\t\t\t\tnode = lights[ nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS ].light ];\n\n\t\t\t} else {\n\n\t\t\t\tnode = new THREE.Object3D();\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.name !== undefined ) {\n\n\t\t\t\tnode.name = THREE.PropertyBinding.sanitizeNodeName( nodeDef.name );\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.extras ) node.userData = nodeDef.extras;\n\n\t\t\tif ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );\n\n\t\t\tif ( nodeDef.matrix !== undefined ) {\n\n\t\t\t\tvar matrix = new THREE.Matrix4();\n\t\t\t\tmatrix.fromArray( nodeDef.matrix );\n\t\t\t\tnode.applyMatrix( matrix );\n\n\t\t\t} else {\n\n\t\t\t\tif ( nodeDef.translation !== undefined ) {\n\n\t\t\t\t\tnode.position.fromArray( nodeDef.translation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.rotation !== undefined ) {\n\n\t\t\t\t\tnode.quaternion.fromArray( nodeDef.rotation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.scale !== undefined ) {\n\n\t\t\t\t\tnode.scale.fromArray( nodeDef.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n\t * @param {number} sceneIndex\n\t * @return {Promise<THREE.Scene>}\n\t */\n\tGLTFParser.prototype.loadScene = function () {\n\n\t\t// scene node hierachy builder\n\n\t\tfunction buildNodeHierachy( nodeId, parentObject, json, allNodes, skins ) {\n\n\t\t\tvar node = allNodes[ nodeId ];\n\t\t\tvar nodeDef = json.nodes[ nodeId ];\n\n\t\t\t// build skeleton here as well\n\n\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\tvar meshes = node.isGroup === true ? node.children : [ node ];\n\n\t\t\t\tfor ( var i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar mesh = meshes[ i ];\n\t\t\t\t\tvar skinEntry = skins[ nodeDef.skin ];\n\n\t\t\t\t\tvar bones = [];\n\t\t\t\t\tvar boneInverses = [];\n\n\t\t\t\t\tfor ( var j = 0, jl = skinEntry.joints.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar jointId = skinEntry.joints[ j ];\n\t\t\t\t\t\tvar jointNode = allNodes[ jointId ];\n\n\t\t\t\t\t\tif ( jointNode ) {\n\n\t\t\t\t\t\t\tbones.push( jointNode );\n\n\t\t\t\t\t\t\tvar mat = new THREE.Matrix4();\n\n\t\t\t\t\t\t\tif ( skinEntry.inverseBindMatrices !== undefined ) {\n\n\t\t\t\t\t\t\t\tmat.fromArray( skinEntry.inverseBindMatrices.array, j * 16 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tboneInverses.push( mat );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Joint \"%s\" could not be found.', jointId );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmesh.bind( new THREE.Skeleton( bones, boneInverses ), mesh.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build node hierachy\n\n\t\t\tparentObject.add( node );\n\n\t\t\tif ( nodeDef.children ) {\n\n\t\t\t\tvar children = nodeDef.children;\n\n\t\t\t\tfor ( var i = 0, il = children.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar child = children[ i ];\n\t\t\t\t\tbuildNodeHierachy( child, node, json, allNodes, skins );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn function loadScene( sceneIndex ) {\n\n\t\t\tvar json = this.json;\n\t\t\tvar extensions = this.extensions;\n\t\t\tvar sceneDef = this.json.scenes[ sceneIndex ];\n\n\t\t\treturn this.getMultiDependencies( [\n\n\t\t\t\t'node',\n\t\t\t\t'skin'\n\n\t\t\t] ).then( function ( dependencies ) {\n\n\t\t\t\tvar scene = new THREE.Scene();\n\t\t\t\tif ( sceneDef.name !== undefined ) scene.name = sceneDef.name;\n\n\t\t\t\tif ( sceneDef.extras ) scene.userData = sceneDef.extras;\n\n\t\t\t\tif ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );\n\n\t\t\t\tvar nodeIds = sceneDef.nodes || [];\n\n\t\t\t\tfor ( var i = 0, il = nodeIds.length; i < il; i ++ ) {\n\n\t\t\t\t\tbuildNodeHierachy( nodeIds[ i ], scene, json, dependencies.nodes, dependencies.skins );\n\n\t\t\t\t}\n\n\t\t\t\t// Ambient lighting, if present, is always attached to the scene root.\n\t\t\t\tif ( sceneDef.extensions\n\t\t\t\t\t\t && sceneDef.extensions[ EXTENSIONS.KHR_LIGHTS ]\n\t\t\t\t\t\t && sceneDef.extensions[ EXTENSIONS.KHR_LIGHTS ].light !== undefined ) {\n\n\t\t\t\t\tvar lights = extensions[ EXTENSIONS.KHR_LIGHTS ].lights;\n\t\t\t\t\tscene.add( lights[ sceneDef.extensions[ EXTENSIONS.KHR_LIGHTS ].light ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn scene;\n\n\t\t\t} );\n\n\t\t};\n\n\t}();\n\n\treturn GLTFLoader;\n\n} )();\n","/**\n * Swiper 4.1.6\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * http://www.idangero.us/swiper/\n *\n * Copyright 2014-2018 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: February 11, 2018\n */\n!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):e.Swiper=t()}(this,function(){\"use strict\";var e=\"undefined\"==typeof document?{body:{},addEventListener:function(){},removeEventListener:function(){},activeElement:{blur:function(){},nodeName:\"\"},querySelector:function(){return null},querySelectorAll:function(){return[]},getElementById:function(){return null},createEvent:function(){return{initEvent:function(){}}},createElement:function(){return{children:[],childNodes:[],style:{},setAttribute:function(){},getElementsByTagName:function(){return[]}}},location:{hash:\"\"}}:document,t=\"undefined\"==typeof window?{document:e,navigator:{userAgent:\"\"},location:{},history:{},CustomEvent:function(){return this},addEventListener:function(){},removeEventListener:function(){},getComputedStyle:function(){return{getPropertyValue:function(){return\"\"}}},Image:function(){},Date:function(){},screen:{},setTimeout:function(){},clearTimeout:function(){}}:window,i=function(e){for(var t=0;t<e.length;t+=1)this[t]=e[t];return this.length=e.length,this};function s(s,a){var r=[],n=0;if(s&&!a&&s instanceof i)return s;if(s)if(\"string\"==typeof s){var o,l,d=s.trim();if(d.indexOf(\"<\")>=0&&d.indexOf(\">\")>=0){var h=\"div\";for(0===d.indexOf(\"<li\")&&(h=\"ul\"),0===d.indexOf(\"<tr\")&&(h=\"tbody\"),0!==d.indexOf(\"<td\")&&0!==d.indexOf(\"<th\")||(h=\"tr\"),0===d.indexOf(\"<tbody\")&&(h=\"table\"),0===d.indexOf(\"<option\")&&(h=\"select\"),(l=e.createElement(h)).innerHTML=d,n=0;n<l.childNodes.length;n+=1)r.push(l.childNodes[n])}else for(o=a||\"#\"!==s[0]||s.match(/[ .<>:~]/)?(a||e).querySelectorAll(s.trim()):[e.getElementById(s.trim().split(\"#\")[1])],n=0;n<o.length;n+=1)o[n]&&r.push(o[n])}else if(s.nodeType||s===t||s===e)r.push(s);else if(s.length>0&&s[0].nodeType)for(n=0;n<s.length;n+=1)r.push(s[n]);return new i(r)}function a(e){for(var t=[],i=0;i<e.length;i+=1)-1===t.indexOf(e[i])&&t.push(e[i]);return t}s.fn=i.prototype,s.Class=i,s.Dom7=i;\"resize scroll\".split(\" \");var r={addClass:function(e){if(void 0===e)return this;for(var t=e.split(\" \"),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s].classList&&this[s].classList.add(t[i]);return this},removeClass:function(e){for(var t=e.split(\" \"),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s].classList&&this[s].classList.remove(t[i]);return this},hasClass:function(e){return!!this[0]&&this[0].classList.contains(e)},toggleClass:function(e){for(var t=e.split(\" \"),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s].classList&&this[s].classList.toggle(t[i]);return this},attr:function(e,t){var i=arguments;if(1===arguments.length&&\"string\"==typeof e)return this[0]?this[0].getAttribute(e):void 0;for(var s=0;s<this.length;s+=1)if(2===i.length)this[s].setAttribute(e,t);else for(var a in e)this[s][a]=e[a],this[s].setAttribute(a,e[a]);return this},removeAttr:function(e){for(var t=0;t<this.length;t+=1)this[t].removeAttribute(e);return this},data:function(e,t){var i;if(void 0!==t){for(var s=0;s<this.length;s+=1)(i=this[s]).dom7ElementDataStorage||(i.dom7ElementDataStorage={}),i.dom7ElementDataStorage[e]=t;return this}if(i=this[0]){if(i.dom7ElementDataStorage&&e in i.dom7ElementDataStorage)return i.dom7ElementDataStorage[e];var a=i.getAttribute(\"data-\"+e);return a||void 0}},transform:function(e){for(var t=0;t<this.length;t+=1){var i=this[t].style;i.webkitTransform=e,i.transform=e}return this},transition:function(e){\"string\"!=typeof e&&(e+=\"ms\");for(var t=0;t<this.length;t+=1){var i=this[t].style;i.webkitTransitionDuration=e,i.transitionDuration=e}return this},on:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var i,a=e[0],r=e[1],n=e[2],o=e[3];function l(e){var t=e.target;if(t){var i=e.target.dom7EventData||[];if(i.unshift(e),s(t).is(r))n.apply(t,i);else for(var a=s(t).parents(),o=0;o<a.length;o+=1)s(a[o]).is(r)&&n.apply(a[o],i)}}function d(e){var t=e&&e.target?e.target.dom7EventData||[]:[];t.unshift(e),n.apply(this,t)}\"function\"==typeof e[1]&&(a=(i=e)[0],n=i[1],o=i[2],r=void 0),o||(o=!1);for(var h,p=a.split(\" \"),c=0;c<this.length;c+=1){var u=this[c];if(r)for(h=0;h<p.length;h+=1)u.dom7LiveListeners||(u.dom7LiveListeners=[]),u.dom7LiveListeners.push({type:a,listener:n,proxyListener:l}),u.addEventListener(p[h],l,o);else for(h=0;h<p.length;h+=1)u.dom7Listeners||(u.dom7Listeners=[]),u.dom7Listeners.push({type:a,listener:n,proxyListener:d}),u.addEventListener(p[h],d,o)}return this},off:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var i,s=e[0],a=e[1],r=e[2],n=e[3];\"function\"==typeof e[1]&&(s=(i=e)[0],r=i[1],n=i[2],a=void 0),n||(n=!1);for(var o=s.split(\" \"),l=0;l<o.length;l+=1)for(var d=0;d<this.length;d+=1){var h=this[d];if(a){if(h.dom7LiveListeners)for(var p=0;p<h.dom7LiveListeners.length;p+=1)r?h.dom7LiveListeners[p].listener===r&&h.removeEventListener(o[l],h.dom7LiveListeners[p].proxyListener,n):h.dom7LiveListeners[p].type===o[l]&&h.removeEventListener(o[l],h.dom7LiveListeners[p].proxyListener,n)}else if(h.dom7Listeners)for(var c=0;c<h.dom7Listeners.length;c+=1)r?h.dom7Listeners[c].listener===r&&h.removeEventListener(o[l],h.dom7Listeners[c].proxyListener,n):h.dom7Listeners[c].type===o[l]&&h.removeEventListener(o[l],h.dom7Listeners[c].proxyListener,n)}return this},trigger:function(){for(var i=[],s=arguments.length;s--;)i[s]=arguments[s];for(var a=i[0].split(\" \"),r=i[1],n=0;n<a.length;n+=1)for(var o=0;o<this.length;o+=1){var l=void 0;try{l=new t.CustomEvent(a[n],{detail:r,bubbles:!0,cancelable:!0})}catch(t){(l=e.createEvent(\"Event\")).initEvent(a[n],!0,!0),l.detail=r}this[o].dom7EventData=i.filter(function(e,t){return t>0}),this[o].dispatchEvent(l),this[o].dom7EventData=[],delete this[o].dom7EventData}return this},transitionEnd:function(e){var t,i=[\"webkitTransitionEnd\",\"transitionend\"],s=this;function a(r){if(r.target===this)for(e.call(this,r),t=0;t<i.length;t+=1)s.off(i[t],a)}if(e)for(t=0;t<i.length;t+=1)s.on(i[t],a);return this},outerWidth:function(e){if(this.length>0){if(e){var t=this.styles();return this[0].offsetWidth+parseFloat(t.getPropertyValue(\"margin-right\"))+parseFloat(t.getPropertyValue(\"margin-left\"))}return this[0].offsetWidth}return null},outerHeight:function(e){if(this.length>0){if(e){var t=this.styles();return this[0].offsetHeight+parseFloat(t.getPropertyValue(\"margin-top\"))+parseFloat(t.getPropertyValue(\"margin-bottom\"))}return this[0].offsetHeight}return null},offset:function(){if(this.length>0){var i=this[0],s=i.getBoundingClientRect(),a=e.body,r=i.clientTop||a.clientTop||0,n=i.clientLeft||a.clientLeft||0,o=i===t?t.scrollY:i.scrollTop,l=i===t?t.scrollX:i.scrollLeft;return{top:s.top+o-r,left:s.left+l-n}}return null},css:function(e,i){var s;if(1===arguments.length){if(\"string\"!=typeof e){for(s=0;s<this.length;s+=1)for(var a in e)this[s].style[a]=e[a];return this}if(this[0])return t.getComputedStyle(this[0],null).getPropertyValue(e)}if(2===arguments.length&&\"string\"==typeof e){for(s=0;s<this.length;s+=1)this[s].style[e]=i;return this}return this},each:function(e){if(!e)return this;for(var t=0;t<this.length;t+=1)if(!1===e.call(this[t],t,this[t]))return this;return this},html:function(e){if(void 0===e)return this[0]?this[0].innerHTML:void 0;for(var t=0;t<this.length;t+=1)this[t].innerHTML=e;return this},text:function(e){if(void 0===e)return this[0]?this[0].textContent.trim():null;for(var t=0;t<this.length;t+=1)this[t].textContent=e;return this},is:function(a){var r,n,o=this[0];if(!o||void 0===a)return!1;if(\"string\"==typeof a){if(o.matches)return o.matches(a);if(o.webkitMatchesSelector)return o.webkitMatchesSelector(a);if(o.msMatchesSelector)return o.msMatchesSelector(a);for(r=s(a),n=0;n<r.length;n+=1)if(r[n]===o)return!0;return!1}if(a===e)return o===e;if(a===t)return o===t;if(a.nodeType||a instanceof i){for(r=a.nodeType?[a]:a,n=0;n<r.length;n+=1)if(r[n]===o)return!0;return!1}return!1},index:function(){var e,t=this[0];if(t){for(e=0;null!==(t=t.previousSibling);)1===t.nodeType&&(e+=1);return e}},eq:function(e){if(void 0===e)return this;var t,s=this.length;return new i(e>s-1?[]:e<0?(t=s+e)<0?[]:[this[t]]:[this[e]])},append:function(){for(var t,s=[],a=arguments.length;a--;)s[a]=arguments[a];for(var r=0;r<s.length;r+=1){t=s[r];for(var n=0;n<this.length;n+=1)if(\"string\"==typeof t){var o=e.createElement(\"div\");for(o.innerHTML=t;o.firstChild;)this[n].appendChild(o.firstChild)}else if(t instanceof i)for(var l=0;l<t.length;l+=1)this[n].appendChild(t[l]);else this[n].appendChild(t)}return this},prepend:function(t){var s,a;for(s=0;s<this.length;s+=1)if(\"string\"==typeof t){var r=e.createElement(\"div\");for(r.innerHTML=t,a=r.childNodes.length-1;a>=0;a-=1)this[s].insertBefore(r.childNodes[a],this[s].childNodes[0])}else if(t instanceof i)for(a=0;a<t.length;a+=1)this[s].insertBefore(t[a],this[s].childNodes[0]);else this[s].insertBefore(t,this[s].childNodes[0]);return this},next:function(e){return this.length>0?e?this[0].nextElementSibling&&s(this[0].nextElementSibling).is(e)?new i([this[0].nextElementSibling]):new i([]):this[0].nextElementSibling?new i([this[0].nextElementSibling]):new i([]):new i([])},nextAll:function(e){var t=[],a=this[0];if(!a)return new i([]);for(;a.nextElementSibling;){var r=a.nextElementSibling;e?s(r).is(e)&&t.push(r):t.push(r),a=r}return new i(t)},prev:function(e){if(this.length>0){var t=this[0];return e?t.previousElementSibling&&s(t.previousElementSibling).is(e)?new i([t.previousElementSibling]):new i([]):t.previousElementSibling?new i([t.previousElementSibling]):new i([])}return new i([])},prevAll:function(e){var t=[],a=this[0];if(!a)return new i([]);for(;a.previousElementSibling;){var r=a.previousElementSibling;e?s(r).is(e)&&t.push(r):t.push(r),a=r}return new i(t)},parent:function(e){for(var t=[],i=0;i<this.length;i+=1)null!==this[i].parentNode&&(e?s(this[i].parentNode).is(e)&&t.push(this[i].parentNode):t.push(this[i].parentNode));return s(a(t))},parents:function(e){for(var t=[],i=0;i<this.length;i+=1)for(var r=this[i].parentNode;r;)e?s(r).is(e)&&t.push(r):t.push(r),r=r.parentNode;return s(a(t))},closest:function(e){var t=this;return void 0===e?new i([]):(t.is(e)||(t=t.parents(e).eq(0)),t)},find:function(e){for(var t=[],s=0;s<this.length;s+=1)for(var a=this[s].querySelectorAll(e),r=0;r<a.length;r+=1)t.push(a[r]);return new i(t)},children:function(e){for(var t=[],r=0;r<this.length;r+=1)for(var n=this[r].childNodes,o=0;o<n.length;o+=1)e?1===n[o].nodeType&&s(n[o]).is(e)&&t.push(n[o]):1===n[o].nodeType&&t.push(n[o]);return new i(a(t))},remove:function(){for(var e=0;e<this.length;e+=1)this[e].parentNode&&this[e].parentNode.removeChild(this[e]);return this},add:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var i,a;for(i=0;i<e.length;i+=1){var r=s(e[i]);for(a=0;a<r.length;a+=1)this[this.length]=r[a],this.length+=1}return this},styles:function(){return this[0]?t.getComputedStyle(this[0],null):{}}};Object.keys(r).forEach(function(e){s.fn[e]=r[e]});var n,o,l,d={deleteProps:function(e){var t=e;Object.keys(t).forEach(function(e){try{t[e]=null}catch(e){}try{delete t[e]}catch(e){}})},nextTick:function(e,t){return void 0===t&&(t=0),setTimeout(e,t)},now:function(){return Date.now()},getTranslate:function(e,i){var s,a,r;void 0===i&&(i=\"x\");var n=t.getComputedStyle(e,null);return t.WebKitCSSMatrix?((a=n.transform||n.webkitTransform).split(\",\").length>6&&(a=a.split(\", \").map(function(e){return e.replace(\",\",\".\")}).join(\", \")),r=new t.WebKitCSSMatrix(\"none\"===a?\"\":a)):s=(r=n.MozTransform||n.OTransform||n.MsTransform||n.msTransform||n.transform||n.getPropertyValue(\"transform\").replace(\"translate(\",\"matrix(1, 0, 0, 1,\")).toString().split(\",\"),\"x\"===i&&(a=t.WebKitCSSMatrix?r.m41:16===s.length?parseFloat(s[12]):parseFloat(s[4])),\"y\"===i&&(a=t.WebKitCSSMatrix?r.m42:16===s.length?parseFloat(s[13]):parseFloat(s[5])),a||0},parseUrlQuery:function(e){var i,s,a,r,n={},o=e||t.location.href;if(\"string\"==typeof o&&o.length)for(r=(s=(o=o.indexOf(\"?\")>-1?o.replace(/\\S*\\?/,\"\"):\"\").split(\"&\").filter(function(e){return\"\"!==e})).length,i=0;i<r;i+=1)a=s[i].replace(/#\\S+/g,\"\").split(\"=\"),n[decodeURIComponent(a[0])]=void 0===a[1]?void 0:decodeURIComponent(a[1])||\"\";return n},isObject:function(e){return\"object\"==typeof e&&null!==e&&e.constructor&&e.constructor===Object},extend:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];for(var i=Object(e[0]),s=1;s<e.length;s+=1){var a=e[s];if(void 0!==a&&null!==a)for(var r=Object.keys(Object(a)),n=0,o=r.length;n<o;n+=1){var l=r[n],h=Object.getOwnPropertyDescriptor(a,l);void 0!==h&&h.enumerable&&(d.isObject(i[l])&&d.isObject(a[l])?d.extend(i[l],a[l]):!d.isObject(i[l])&&d.isObject(a[l])?(i[l]={},d.extend(i[l],a[l])):i[l]=a[l])}}return i}},h=(l=e.createElement(\"div\"),{touch:t.Modernizr&&!0===t.Modernizr.touch||!!(\"ontouchstart\"in t||t.DocumentTouch&&e instanceof t.DocumentTouch),pointerEvents:!(!t.navigator.pointerEnabled&&!t.PointerEvent),prefixedPointerEvents:!!t.navigator.msPointerEnabled,transition:(o=l.style,\"transition\"in o||\"webkitTransition\"in o||\"MozTransition\"in o),transforms3d:t.Modernizr&&!0===t.Modernizr.csstransforms3d||(n=l.style,\"webkitPerspective\"in n||\"MozPerspective\"in n||\"OPerspective\"in n||\"MsPerspective\"in n||\"perspective\"in n),flexbox:function(){for(var e=l.style,t=\"alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient\".split(\" \"),i=0;i<t.length;i+=1)if(t[i]in e)return!0;return!1}(),observer:\"MutationObserver\"in t||\"WebkitMutationObserver\"in t,passiveListener:function(){var e=!1;try{var i=Object.defineProperty({},\"passive\",{get:function(){e=!0}});t.addEventListener(\"testPassiveListener\",null,i)}catch(e){}return e}(),gestures:\"ongesturestart\"in t}),p=function(e){void 0===e&&(e={});var t=this;t.params=e,t.eventsListeners={},t.params&&t.params.on&&Object.keys(t.params.on).forEach(function(e){t.on(e,t.params.on[e])})},c={components:{configurable:!0}};p.prototype.on=function(e,t){var i=this;return\"function\"!=typeof t?i:(e.split(\" \").forEach(function(e){i.eventsListeners[e]||(i.eventsListeners[e]=[]),i.eventsListeners[e].push(t)}),i)},p.prototype.once=function(e,t){var i=this;if(\"function\"!=typeof t)return i;return i.on(e,function s(){for(var a=[],r=arguments.length;r--;)a[r]=arguments[r];t.apply(i,a),i.off(e,s)})},p.prototype.off=function(e,t){var i=this;return e.split(\" \").forEach(function(e){void 0===t?i.eventsListeners[e]=[]:i.eventsListeners[e].forEach(function(s,a){s===t&&i.eventsListeners[e].splice(a,1)})}),i},p.prototype.emit=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var i,s,a,r=this;return r.eventsListeners?(\"string\"==typeof e[0]||Array.isArray(e[0])?(i=e[0],s=e.slice(1,e.length),a=r):(i=e[0].events,s=e[0].data,a=e[0].context||r),(Array.isArray(i)?i:i.split(\" \")).forEach(function(e){if(r.eventsListeners[e]){var t=[];r.eventsListeners[e].forEach(function(e){t.push(e)}),t.forEach(function(e){e.apply(a,s)})}}),r):r},p.prototype.useModulesParams=function(e){var t=this;t.modules&&Object.keys(t.modules).forEach(function(i){var s=t.modules[i];s.params&&d.extend(e,s.params)})},p.prototype.useModules=function(e){void 0===e&&(e={});var t=this;t.modules&&Object.keys(t.modules).forEach(function(i){var s=t.modules[i],a=e[i]||{};s.instance&&Object.keys(s.instance).forEach(function(e){var i=s.instance[e];t[e]=\"function\"==typeof i?i.bind(t):i}),s.on&&t.on&&Object.keys(s.on).forEach(function(e){t.on(e,s.on[e])}),s.create&&s.create.bind(t)(a)})},c.components.set=function(e){this.use&&this.use(e)},p.installModule=function(e){for(var t=[],i=arguments.length-1;i-- >0;)t[i]=arguments[i+1];var s=this;s.prototype.modules||(s.prototype.modules={});var a=e.name||Object.keys(s.prototype.modules).length+\"_\"+d.now();return s.prototype.modules[a]=e,e.proto&&Object.keys(e.proto).forEach(function(t){s.prototype[t]=e.proto[t]}),e.static&&Object.keys(e.static).forEach(function(t){s[t]=e.static[t]}),e.install&&e.install.apply(s,t),s},p.use=function(e){for(var t=[],i=arguments.length-1;i-- >0;)t[i]=arguments[i+1];var s=this;return Array.isArray(e)?(e.forEach(function(e){return s.installModule(e)}),s):s.installModule.apply(s,[e].concat(t))},Object.defineProperties(p,c);var u={updateSize:function(){var e,t,i=this.$el;e=void 0!==this.params.width?this.params.width:i[0].clientWidth,t=void 0!==this.params.height?this.params.height:i[0].clientHeight,0===e&&this.isHorizontal()||0===t&&this.isVertical()||(e=e-parseInt(i.css(\"padding-left\"),10)-parseInt(i.css(\"padding-right\"),10),t=t-parseInt(i.css(\"padding-top\"),10)-parseInt(i.css(\"padding-bottom\"),10),d.extend(this,{width:e,height:t,size:this.isHorizontal()?e:t}))},updateSlides:function(){var e=this.params,t=this.$wrapperEl,i=this.size,s=this.rtl,a=this.wrongRTL,r=t.children(\".\"+this.params.slideClass),n=this.virtual&&e.virtual.enabled?this.virtual.slides.length:r.length,o=[],l=[],p=[],c=e.slidesOffsetBefore;\"function\"==typeof c&&(c=e.slidesOffsetBefore.call(this));var u=e.slidesOffsetAfter;\"function\"==typeof u&&(u=e.slidesOffsetAfter.call(this));var v=n,f=this.snapGrid.length,m=this.snapGrid.length,g=e.spaceBetween,b=-c,w=0,y=0;if(void 0!==i){var x,E;\"string\"==typeof g&&g.indexOf(\"%\")>=0&&(g=parseFloat(g.replace(\"%\",\"\"))/100*i),this.virtualSize=-g,s?r.css({marginLeft:\"\",marginTop:\"\"}):r.css({marginRight:\"\",marginBottom:\"\"}),e.slidesPerColumn>1&&(x=Math.floor(n/e.slidesPerColumn)===n/this.params.slidesPerColumn?n:Math.ceil(n/e.slidesPerColumn)*e.slidesPerColumn,\"auto\"!==e.slidesPerView&&\"row\"===e.slidesPerColumnFill&&(x=Math.max(x,e.slidesPerView*e.slidesPerColumn)));for(var T,S=e.slidesPerColumn,C=x/S,M=C-(e.slidesPerColumn*C-n),z=0;z<n;z+=1){E=0;var P=r.eq(z);if(e.slidesPerColumn>1){var k=void 0,$=void 0,L=void 0;\"column\"===e.slidesPerColumnFill?(L=z-($=Math.floor(z/S))*S,($>M||$===M&&L===S-1)&&(L+=1)>=S&&(L=0,$+=1),k=$+L*x/S,P.css({\"-webkit-box-ordinal-group\":k,\"-moz-box-ordinal-group\":k,\"-ms-flex-order\":k,\"-webkit-order\":k,order:k})):$=z-(L=Math.floor(z/C))*C,P.css(\"margin-\"+(this.isHorizontal()?\"top\":\"left\"),0!==L&&e.spaceBetween&&e.spaceBetween+\"px\").attr(\"data-swiper-column\",$).attr(\"data-swiper-row\",L)}\"none\"!==P.css(\"display\")&&(\"auto\"===e.slidesPerView?(E=this.isHorizontal()?P.outerWidth(!0):P.outerHeight(!0),e.roundLengths&&(E=Math.floor(E))):(E=(i-(e.slidesPerView-1)*g)/e.slidesPerView,e.roundLengths&&(E=Math.floor(E)),r[z]&&(this.isHorizontal()?r[z].style.width=E+\"px\":r[z].style.height=E+\"px\")),r[z]&&(r[z].swiperSlideSize=E),p.push(E),e.centeredSlides?(b=b+E/2+w/2+g,0===w&&0!==z&&(b=b-i/2-g),0===z&&(b=b-i/2-g),Math.abs(b)<.001&&(b=0),y%e.slidesPerGroup==0&&o.push(b),l.push(b)):(y%e.slidesPerGroup==0&&o.push(b),l.push(b),b=b+E+g),this.virtualSize+=E+g,w=E,y+=1)}if(this.virtualSize=Math.max(this.virtualSize,i)+u,s&&a&&(\"slide\"===e.effect||\"coverflow\"===e.effect)&&t.css({width:this.virtualSize+e.spaceBetween+\"px\"}),h.flexbox&&!e.setWrapperSize||(this.isHorizontal()?t.css({width:this.virtualSize+e.spaceBetween+\"px\"}):t.css({height:this.virtualSize+e.spaceBetween+\"px\"})),e.slidesPerColumn>1&&(this.virtualSize=(E+e.spaceBetween)*x,this.virtualSize=Math.ceil(this.virtualSize/e.slidesPerColumn)-e.spaceBetween,this.isHorizontal()?t.css({width:this.virtualSize+e.spaceBetween+\"px\"}):t.css({height:this.virtualSize+e.spaceBetween+\"px\"}),e.centeredSlides)){T=[];for(var I=0;I<o.length;I+=1)o[I]<this.virtualSize+o[0]&&T.push(o[I]);o=T}if(!e.centeredSlides){T=[];for(var D=0;D<o.length;D+=1)o[D]<=this.virtualSize-i&&T.push(o[D]);o=T,Math.floor(this.virtualSize-i)-Math.floor(o[o.length-1])>1&&o.push(this.virtualSize-i)}0===o.length&&(o=[0]),0!==e.spaceBetween&&(this.isHorizontal()?s?r.css({marginLeft:g+\"px\"}):r.css({marginRight:g+\"px\"}):r.css({marginBottom:g+\"px\"})),d.extend(this,{slides:r,snapGrid:o,slidesGrid:l,slidesSizesGrid:p}),n!==v&&this.emit(\"slidesLengthChange\"),o.length!==f&&(this.params.watchOverflow&&this.checkOverflow(),this.emit(\"snapGridLengthChange\")),l.length!==m&&this.emit(\"slidesGridLengthChange\"),(e.watchSlidesProgress||e.watchSlidesVisibility)&&this.updateSlidesOffset()}},updateAutoHeight:function(){var e,t=[],i=0;if(\"auto\"!==this.params.slidesPerView&&this.params.slidesPerView>1)for(e=0;e<Math.ceil(this.params.slidesPerView);e+=1){var s=this.activeIndex+e;if(s>this.slides.length)break;t.push(this.slides.eq(s)[0])}else t.push(this.slides.eq(this.activeIndex)[0]);for(e=0;e<t.length;e+=1)if(void 0!==t[e]){var a=t[e].offsetHeight;i=a>i?a:i}i&&this.$wrapperEl.css(\"height\",i+\"px\")},updateSlidesOffset:function(){for(var e=this.slides,t=0;t<e.length;t+=1)e[t].swiperSlideOffset=this.isHorizontal()?e[t].offsetLeft:e[t].offsetTop},updateSlidesProgress:function(e){void 0===e&&(e=this.translate||0);var t=this.params,i=this.slides,s=this.rtl;if(0!==i.length){void 0===i[0].swiperSlideOffset&&this.updateSlidesOffset();var a=-e;s&&(a=e),i.removeClass(t.slideVisibleClass);for(var r=0;r<i.length;r+=1){var n=i[r],o=(a+(t.centeredSlides?this.minTranslate():0)-n.swiperSlideOffset)/(n.swiperSlideSize+t.spaceBetween);if(t.watchSlidesVisibility){var l=-(a-n.swiperSlideOffset),d=l+this.slidesSizesGrid[r];(l>=0&&l<this.size||d>0&&d<=this.size||l<=0&&d>=this.size)&&i.eq(r).addClass(t.slideVisibleClass)}n.progress=s?-o:o}}},updateProgress:function(e){void 0===e&&(e=this.translate||0);var t=this.params,i=this.maxTranslate()-this.minTranslate(),s=this.progress,a=this.isBeginning,r=this.isEnd,n=a,o=r;0===i?(s=0,a=!0,r=!0):(a=(s=(e-this.minTranslate())/i)<=0,r=s>=1),d.extend(this,{progress:s,isBeginning:a,isEnd:r}),(t.watchSlidesProgress||t.watchSlidesVisibility)&&this.updateSlidesProgress(e),a&&!n&&this.emit(\"reachBeginning toEdge\"),r&&!o&&this.emit(\"reachEnd toEdge\"),(n&&!a||o&&!r)&&this.emit(\"fromEdge\"),this.emit(\"progress\",s)},updateSlidesClasses:function(){var e,t=this.slides,i=this.params,s=this.$wrapperEl,a=this.activeIndex,r=this.realIndex,n=this.virtual&&i.virtual.enabled;t.removeClass(i.slideActiveClass+\" \"+i.slideNextClass+\" \"+i.slidePrevClass+\" \"+i.slideDuplicateActiveClass+\" \"+i.slideDuplicateNextClass+\" \"+i.slideDuplicatePrevClass),(e=n?this.$wrapperEl.find(\".\"+i.slideClass+'[data-swiper-slide-index=\"'+a+'\"]'):t.eq(a)).addClass(i.slideActiveClass),i.loop&&(e.hasClass(i.slideDuplicateClass)?s.children(\".\"+i.slideClass+\":not(.\"+i.slideDuplicateClass+')[data-swiper-slide-index=\"'+r+'\"]').addClass(i.slideDuplicateActiveClass):s.children(\".\"+i.slideClass+\".\"+i.slideDuplicateClass+'[data-swiper-slide-index=\"'+r+'\"]').addClass(i.slideDuplicateActiveClass));var o=e.nextAll(\".\"+i.slideClass).eq(0).addClass(i.slideNextClass);i.loop&&0===o.length&&(o=t.eq(0)).addClass(i.slideNextClass);var l=e.prevAll(\".\"+i.slideClass).eq(0).addClass(i.slidePrevClass);i.loop&&0===l.length&&(l=t.eq(-1)).addClass(i.slidePrevClass),i.loop&&(o.hasClass(i.slideDuplicateClass)?s.children(\".\"+i.slideClass+\":not(.\"+i.slideDuplicateClass+')[data-swiper-slide-index=\"'+o.attr(\"data-swiper-slide-index\")+'\"]').addClass(i.slideDuplicateNextClass):s.children(\".\"+i.slideClass+\".\"+i.slideDuplicateClass+'[data-swiper-slide-index=\"'+o.attr(\"data-swiper-slide-index\")+'\"]').addClass(i.slideDuplicateNextClass),l.hasClass(i.slideDuplicateClass)?s.children(\".\"+i.slideClass+\":not(.\"+i.slideDuplicateClass+')[data-swiper-slide-index=\"'+l.attr(\"data-swiper-slide-index\")+'\"]').addClass(i.slideDuplicatePrevClass):s.children(\".\"+i.slideClass+\".\"+i.slideDuplicateClass+'[data-swiper-slide-index=\"'+l.attr(\"data-swiper-slide-index\")+'\"]').addClass(i.slideDuplicatePrevClass))},updateActiveIndex:function(e){var t,i=this.rtl?this.translate:-this.translate,s=this.slidesGrid,a=this.snapGrid,r=this.params,n=this.activeIndex,o=this.realIndex,l=this.snapIndex,h=e;if(void 0===h){for(var p=0;p<s.length;p+=1)void 0!==s[p+1]?i>=s[p]&&i<s[p+1]-(s[p+1]-s[p])/2?h=p:i>=s[p]&&i<s[p+1]&&(h=p+1):i>=s[p]&&(h=p);r.normalizeSlideIndex&&(h<0||void 0===h)&&(h=0)}if((t=a.indexOf(i)>=0?a.indexOf(i):Math.floor(h/r.slidesPerGroup))>=a.length&&(t=a.length-1),h!==n){var c=parseInt(this.slides.eq(h).attr(\"data-swiper-slide-index\")||h,10);d.extend(this,{snapIndex:t,realIndex:c,previousIndex:n,activeIndex:h}),this.emit(\"activeIndexChange\"),this.emit(\"snapIndexChange\"),o!==c&&this.emit(\"realIndexChange\"),this.emit(\"slideChange\")}else t!==l&&(this.snapIndex=t,this.emit(\"snapIndexChange\"))},updateClickedSlide:function(e){var t=this.params,i=s(e.target).closest(\".\"+t.slideClass)[0],a=!1;if(i)for(var r=0;r<this.slides.length;r+=1)this.slides[r]===i&&(a=!0);if(!i||!a)return this.clickedSlide=void 0,void(this.clickedIndex=void 0);this.clickedSlide=i,this.virtual&&this.params.virtual.enabled?this.clickedIndex=parseInt(s(i).attr(\"data-swiper-slide-index\"),10):this.clickedIndex=s(i).index(),t.slideToClickedSlide&&void 0!==this.clickedIndex&&this.clickedIndex!==this.activeIndex&&this.slideToClickedSlide()}},v={getTranslate:function(e){void 0===e&&(e=this.isHorizontal()?\"x\":\"y\");var t=this.params,i=this.rtl,s=this.translate,a=this.$wrapperEl;if(t.virtualTranslate)return i?-s:s;var r=d.getTranslate(a[0],e);return i&&(r=-r),r||0},setTranslate:function(e,t){var i=this.rtl,s=this.params,a=this.$wrapperEl,r=this.progress,n=0,o=0;this.isHorizontal()?n=i?-e:e:o=e,s.roundLengths&&(n=Math.floor(n),o=Math.floor(o)),s.virtualTranslate||(h.transforms3d?a.transform(\"translate3d(\"+n+\"px, \"+o+\"px, 0px)\"):a.transform(\"translate(\"+n+\"px, \"+o+\"px)\")),this.translate=this.isHorizontal()?n:o;var l=this.maxTranslate()-this.minTranslate();(0===l?0:(e-this.minTranslate())/l)!==r&&this.updateProgress(e),this.emit(\"setTranslate\",this.translate,t)},minTranslate:function(){return-this.snapGrid[0]},maxTranslate:function(){return-this.snapGrid[this.snapGrid.length-1]}},f={setTransition:function(e,t){this.$wrapperEl.transition(e),this.emit(\"setTransition\",e,t)},transitionStart:function(e,t){void 0===e&&(e=!0);var i=this.activeIndex,s=this.params,a=this.previousIndex;s.autoHeight&&this.updateAutoHeight();var r=t;if(r||(r=i>a?\"next\":i<a?\"prev\":\"reset\"),this.emit(\"transitionStart\"),e&&i!==a){if(\"reset\"===r)return void this.emit(\"slideResetTransitionStart\");this.emit(\"slideChangeTransitionStart\"),\"next\"===r?this.emit(\"slideNextTransitionStart\"):this.emit(\"slidePrevTransitionStart\")}},transitionEnd:function(e,t){void 0===e&&(e=!0);var i=this.activeIndex,s=this.previousIndex;this.animating=!1,this.setTransition(0);var a=t;if(a||(a=i>s?\"next\":i<s?\"prev\":\"reset\"),this.emit(\"transitionEnd\"),e&&i!==s){if(\"reset\"===a)return void this.emit(\"slideResetTransitionEnd\");this.emit(\"slideChangeTransitionEnd\"),\"next\"===a?this.emit(\"slideNextTransitionEnd\"):this.emit(\"slidePrevTransitionEnd\")}}},m={slideTo:function(e,t,i,s){void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===i&&(i=!0);var a=this,r=e;r<0&&(r=0);var n=a.params,o=a.snapGrid,l=a.slidesGrid,d=a.previousIndex,p=a.activeIndex,c=a.rtl,u=a.$wrapperEl;if(a.animating&&n.preventIntercationOnTransition)return!1;var v=Math.floor(r/n.slidesPerGroup);v>=o.length&&(v=o.length-1),(p||n.initialSlide||0)===(d||0)&&i&&a.emit(\"beforeSlideChangeStart\");var f,m=-o[v];if(a.updateProgress(m),n.normalizeSlideIndex)for(var g=0;g<l.length;g+=1)-Math.floor(100*m)>=Math.floor(100*l[g])&&(r=g);if(a.initialized&&r!==p){if(!a.allowSlideNext&&m<a.translate&&m<a.minTranslate())return!1;if(!a.allowSlidePrev&&m>a.translate&&m>a.maxTranslate()&&(p||0)!==r)return!1}return f=r>p?\"next\":r<p?\"prev\":\"reset\",c&&-m===a.translate||!c&&m===a.translate?(a.updateActiveIndex(r),n.autoHeight&&a.updateAutoHeight(),a.updateSlidesClasses(),\"slide\"!==n.effect&&a.setTranslate(m),\"reset\"!==f&&(a.transitionStart(i,f),a.transitionEnd(i,f)),!1):(0!==t&&h.transition?(a.setTransition(t),a.setTranslate(m),a.updateActiveIndex(r),a.updateSlidesClasses(),a.emit(\"beforeTransitionStart\",t,s),a.transitionStart(i,f),a.animating||(a.animating=!0,u.transitionEnd(function(){a&&!a.destroyed&&a.transitionEnd(i,f)}))):(a.setTransition(0),a.setTranslate(m),a.updateActiveIndex(r),a.updateSlidesClasses(),a.emit(\"beforeTransitionStart\",t,s),a.transitionStart(i,f),a.transitionEnd(i,f)),!0)},slideToLoop:function(e,t,i,s){void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===i&&(i=!0);var a=e;return this.params.loop&&(a+=this.loopedSlides),this.slideTo(a,t,i,s)},slideNext:function(e,t,i){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);var s=this.params,a=this.animating;return s.loop?!a&&(this.loopFix(),this._clientLeft=this.$wrapperEl[0].clientLeft,this.slideTo(this.activeIndex+s.slidesPerGroup,e,t,i)):this.slideTo(this.activeIndex+s.slidesPerGroup,e,t,i)},slidePrev:function(e,t,i){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);var s=this.params,a=this.animating;return s.loop?!a&&(this.loopFix(),this._clientLeft=this.$wrapperEl[0].clientLeft,this.slideTo(this.activeIndex-1,e,t,i)):this.slideTo(this.activeIndex-1,e,t,i)},slideReset:function(e,t,i){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);return this.slideTo(this.activeIndex,e,t,i)},slideToClickedSlide:function(){var e,t=this,i=t.params,a=t.$wrapperEl,r=\"auto\"===i.slidesPerView?t.slidesPerViewDynamic():i.slidesPerView,n=t.clickedIndex;if(i.loop){if(t.animating)return;e=parseInt(s(t.clickedSlide).attr(\"data-swiper-slide-index\"),10),i.centeredSlides?n<t.loopedSlides-r/2||n>t.slides.length-t.loopedSlides+r/2?(t.loopFix(),n=a.children(\".\"+i.slideClass+'[data-swiper-slide-index=\"'+e+'\"]:not(.'+i.slideDuplicateClass+\")\").eq(0).index(),d.nextTick(function(){t.slideTo(n)})):t.slideTo(n):n>t.slides.length-r?(t.loopFix(),n=a.children(\".\"+i.slideClass+'[data-swiper-slide-index=\"'+e+'\"]:not(.'+i.slideDuplicateClass+\")\").eq(0).index(),d.nextTick(function(){t.slideTo(n)})):t.slideTo(n)}else t.slideTo(n)}},g={loopCreate:function(){var t=this,i=t.params,a=t.$wrapperEl;a.children(\".\"+i.slideClass+\".\"+i.slideDuplicateClass).remove();var r=a.children(\".\"+i.slideClass);if(i.loopFillGroupWithBlank){var n=i.slidesPerGroup-r.length%i.slidesPerGroup;if(n!==i.slidesPerGroup){for(var o=0;o<n;o+=1){var l=s(e.createElement(\"div\")).addClass(i.slideClass+\" \"+i.slideBlankClass);a.append(l)}r=a.children(\".\"+i.slideClass)}}\"auto\"!==i.slidesPerView||i.loopedSlides||(i.loopedSlides=r.length),t.loopedSlides=parseInt(i.loopedSlides||i.slidesPerView,10),t.loopedSlides+=i.loopAdditionalSlides,t.loopedSlides>r.length&&(t.loopedSlides=r.length);var d=[],h=[];r.each(function(e,i){var a=s(i);e<t.loopedSlides&&h.push(i),e<r.length&&e>=r.length-t.loopedSlides&&d.push(i),a.attr(\"data-swiper-slide-index\",e)});for(var p=0;p<h.length;p+=1)a.append(s(h[p].cloneNode(!0)).addClass(i.slideDuplicateClass));for(var c=d.length-1;c>=0;c-=1)a.prepend(s(d[c].cloneNode(!0)).addClass(i.slideDuplicateClass))},loopFix:function(){var e,t=this.params,i=this.activeIndex,s=this.slides,a=this.loopedSlides,r=this.allowSlidePrev,n=this.allowSlideNext,o=this.snapGrid,l=this.rtl;this.allowSlidePrev=!0,this.allowSlideNext=!0;var d=-o[i]-this.getTranslate();i<a?(e=s.length-3*a+i,e+=a,this.slideTo(e,0,!1,!0)&&0!==d&&this.setTranslate((l?-this.translate:this.translate)-d)):(\"auto\"===t.slidesPerView&&i>=2*a||i>s.length-2*t.slidesPerView)&&(e=-s.length+i+a,e+=a,this.slideTo(e,0,!1,!0)&&0!==d&&this.setTranslate((l?-this.translate:this.translate)-d));this.allowSlidePrev=r,this.allowSlideNext=n},loopDestroy:function(){var e=this.$wrapperEl,t=this.params,i=this.slides;e.children(\".\"+t.slideClass+\".\"+t.slideDuplicateClass).remove(),i.removeAttr(\"data-swiper-slide-index\")}},b={setGrabCursor:function(e){if(!h.touch&&this.params.simulateTouch){var t=this.el;t.style.cursor=\"move\",t.style.cursor=e?\"-webkit-grabbing\":\"-webkit-grab\",t.style.cursor=e?\"-moz-grabbin\":\"-moz-grab\",t.style.cursor=e?\"grabbing\":\"grab\"}},unsetGrabCursor:function(){h.touch||(this.el.style.cursor=\"\")}},w={appendSlide:function(e){var t=this.$wrapperEl,i=this.params;if(i.loop&&this.loopDestroy(),\"object\"==typeof e&&\"length\"in e)for(var s=0;s<e.length;s+=1)e[s]&&t.append(e[s]);else t.append(e);i.loop&&this.loopCreate(),i.observer&&h.observer||this.update()},prependSlide:function(e){var t=this.params,i=this.$wrapperEl,s=this.activeIndex;t.loop&&this.loopDestroy();var a=s+1;if(\"object\"==typeof e&&\"length\"in e){for(var r=0;r<e.length;r+=1)e[r]&&i.prepend(e[r]);a=s+e.length}else i.prepend(e);t.loop&&this.loopCreate(),t.observer&&h.observer||this.update(),this.slideTo(a,0,!1)},removeSlide:function(e){var t=this.params,i=this.$wrapperEl,s=this.activeIndex;t.loop&&(this.loopDestroy(),this.slides=i.children(\".\"+t.slideClass));var a,r=s;if(\"object\"==typeof e&&\"length\"in e){for(var n=0;n<e.length;n+=1)a=e[n],this.slides[a]&&this.slides.eq(a).remove(),a<r&&(r-=1);r=Math.max(r,0)}else a=e,this.slides[a]&&this.slides.eq(a).remove(),a<r&&(r-=1),r=Math.max(r,0);t.loop&&this.loopCreate(),t.observer&&h.observer||this.update(),t.loop?this.slideTo(r+this.loopedSlides,0,!1):this.slideTo(r,0,!1)},removeAllSlides:function(){for(var e=[],t=0;t<this.slides.length;t+=1)e.push(t);this.removeSlide(e)}},y=function(){var i=t.navigator.userAgent,s={ios:!1,android:!1,androidChrome:!1,desktop:!1,windows:!1,iphone:!1,ipod:!1,ipad:!1,cordova:t.cordova||t.phonegap,phonegap:t.cordova||t.phonegap},a=i.match(/(Windows Phone);?[\\s\\/]+([\\d.]+)?/),r=i.match(/(Android);?[\\s\\/]+([\\d.]+)?/),n=i.match(/(iPad).*OS\\s([\\d_]+)/),o=i.match(/(iPod)(.*OS\\s([\\d_]+))?/),l=!n&&i.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);if(a&&(s.os=\"windows\",s.osVersion=a[2],s.windows=!0),r&&!a&&(s.os=\"android\",s.osVersion=r[2],s.android=!0,s.androidChrome=i.toLowerCase().indexOf(\"chrome\")>=0),(n||l||o)&&(s.os=\"ios\",s.ios=!0),l&&!o&&(s.osVersion=l[2].replace(/_/g,\".\"),s.iphone=!0),n&&(s.osVersion=n[2].replace(/_/g,\".\"),s.ipad=!0),o&&(s.osVersion=o[3]?o[3].replace(/_/g,\".\"):null,s.iphone=!0),s.ios&&s.osVersion&&i.indexOf(\"Version/\")>=0&&\"10\"===s.osVersion.split(\".\")[0]&&(s.osVersion=i.toLowerCase().split(\"version/\")[1].split(\" \")[0]),s.desktop=!(s.os||s.android||s.webView),s.webView=(l||n||o)&&i.match(/.*AppleWebKit(?!.*Safari)/i),s.os&&\"ios\"===s.os){var d=s.osVersion.split(\".\"),h=e.querySelector('meta[name=\"viewport\"]');s.minimalUi=!s.webView&&(o||l)&&(1*d[0]==7?1*d[1]>=1:1*d[0]>7)&&h&&h.getAttribute(\"content\").indexOf(\"minimal-ui\")>=0}return s.pixelRatio=t.devicePixelRatio||1,s}(),x=function(i){var a=this.touchEventsData,r=this.params,n=this.touches;if(!this.animating||!r.preventIntercationOnTransition){var o=i;if(o.originalEvent&&(o=o.originalEvent),a.isTouchEvent=\"touchstart\"===o.type,(a.isTouchEvent||!(\"which\"in o)||3!==o.which)&&(!a.isTouched||!a.isMoved))if(r.noSwiping&&s(o.target).closest(r.noSwipingSelector?r.noSwipingSelector:\".\"+r.noSwipingClass)[0])this.allowClick=!0;else if(!r.swipeHandler||s(o).closest(r.swipeHandler)[0]){n.currentX=\"touchstart\"===o.type?o.targetTouches[0].pageX:o.pageX,n.currentY=\"touchstart\"===o.type?o.targetTouches[0].pageY:o.pageY;var l=n.currentX,h=n.currentY;if(!(y.ios&&!y.cordova&&r.iOSEdgeSwipeDetection&&l<=r.iOSEdgeSwipeThreshold&&l>=t.screen.width-r.iOSEdgeSwipeThreshold)){if(d.extend(a,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),n.startX=l,n.startY=h,a.touchStartTime=d.now(),this.allowClick=!0,this.updateSize(),this.swipeDirection=void 0,r.threshold>0&&(a.allowThresholdMove=!1),\"touchstart\"!==o.type){var p=!0;s(o.target).is(a.formElements)&&(p=!1),e.activeElement&&s(e.activeElement).is(a.formElements)&&e.activeElement!==o.target&&e.activeElement.blur(),p&&this.allowTouchMove&&o.preventDefault()}this.emit(\"touchStart\",o)}}}},E=function(t){var i=this.touchEventsData,a=this.params,r=this.touches,n=this.rtl,o=t;if(o.originalEvent&&(o=o.originalEvent),i.isTouched){if(!i.isTouchEvent||\"mousemove\"!==o.type){var l=\"touchmove\"===o.type?o.targetTouches[0].pageX:o.pageX,h=\"touchmove\"===o.type?o.targetTouches[0].pageY:o.pageY;if(o.preventedByNestedSwiper)return r.startX=l,void(r.startY=h);if(!this.allowTouchMove)return this.allowClick=!1,void(i.isTouched&&(d.extend(r,{startX:l,startY:h,currentX:l,currentY:h}),i.touchStartTime=d.now()));if(i.isTouchEvent&&a.touchReleaseOnEdges&&!a.loop)if(this.isVertical()){if(h<r.startY&&this.translate<=this.maxTranslate()||h>r.startY&&this.translate>=this.minTranslate())return i.isTouched=!1,void(i.isMoved=!1)}else if(l<r.startX&&this.translate<=this.maxTranslate()||l>r.startX&&this.translate>=this.minTranslate())return;if(i.isTouchEvent&&e.activeElement&&o.target===e.activeElement&&s(o.target).is(i.formElements))return i.isMoved=!0,void(this.allowClick=!1);if(i.allowTouchCallbacks&&this.emit(\"touchMove\",o),!(o.targetTouches&&o.targetTouches.length>1)){r.currentX=l,r.currentY=h;var p,c=r.currentX-r.startX,u=r.currentY-r.startY;if(void 0===i.isScrolling)this.isHorizontal()&&r.currentY===r.startY||this.isVertical()&&r.currentX===r.startX?i.isScrolling=!1:c*c+u*u>=25&&(p=180*Math.atan2(Math.abs(u),Math.abs(c))/Math.PI,i.isScrolling=this.isHorizontal()?p>a.touchAngle:90-p>a.touchAngle);if(i.isScrolling&&this.emit(\"touchMoveOpposite\",o),\"undefined\"==typeof startMoving&&(r.currentX===r.startX&&r.currentY===r.startY||(i.startMoving=!0)),i.isScrolling)i.isTouched=!1;else if(i.startMoving){this.allowClick=!1,o.preventDefault(),a.touchMoveStopPropagation&&!a.nested&&o.stopPropagation(),i.isMoved||(a.loop&&this.loopFix(),i.startTranslate=this.getTranslate(),this.setTransition(0),this.animating&&this.$wrapperEl.trigger(\"webkitTransitionEnd transitionend\"),i.allowMomentumBounce=!1,!a.grabCursor||!0!==this.allowSlideNext&&!0!==this.allowSlidePrev||this.setGrabCursor(!0),this.emit(\"sliderFirstMove\",o)),this.emit(\"sliderMove\",o),i.isMoved=!0;var v=this.isHorizontal()?c:u;r.diff=v,v*=a.touchRatio,n&&(v=-v),this.swipeDirection=v>0?\"prev\":\"next\",i.currentTranslate=v+i.startTranslate;var f=!0,m=a.resistanceRatio;if(a.touchReleaseOnEdges&&(m=0),v>0&&i.currentTranslate>this.minTranslate()?(f=!1,a.resistance&&(i.currentTranslate=this.minTranslate()-1+Math.pow(-this.minTranslate()+i.startTranslate+v,m))):v<0&&i.currentTranslate<this.maxTranslate()&&(f=!1,a.resistance&&(i.currentTranslate=this.maxTranslate()+1-Math.pow(this.maxTranslate()-i.startTranslate-v,m))),f&&(o.preventedByNestedSwiper=!0),!this.allowSlideNext&&\"next\"===this.swipeDirection&&i.currentTranslate<i.startTranslate&&(i.currentTranslate=i.startTranslate),!this.allowSlidePrev&&\"prev\"===this.swipeDirection&&i.currentTranslate>i.startTranslate&&(i.currentTranslate=i.startTranslate),a.threshold>0){if(!(Math.abs(v)>a.threshold||i.allowThresholdMove))return void(i.currentTranslate=i.startTranslate);if(!i.allowThresholdMove)return i.allowThresholdMove=!0,r.startX=r.currentX,r.startY=r.currentY,i.currentTranslate=i.startTranslate,void(r.diff=this.isHorizontal()?r.currentX-r.startX:r.currentY-r.startY)}a.followFinger&&((a.freeMode||a.watchSlidesProgress||a.watchSlidesVisibility)&&(this.updateActiveIndex(),this.updateSlidesClasses()),a.freeMode&&(0===i.velocities.length&&i.velocities.push({position:r[this.isHorizontal()?\"startX\":\"startY\"],time:i.touchStartTime}),i.velocities.push({position:r[this.isHorizontal()?\"currentX\":\"currentY\"],time:d.now()})),this.updateProgress(i.currentTranslate),this.setTranslate(i.currentTranslate))}}}}else i.startMoving&&i.isScrolling&&this.emit(\"touchMoveOpposite\",o)},T=function(e){var t=this,i=t.touchEventsData,s=t.params,a=t.touches,r=t.rtl,n=t.$wrapperEl,o=t.slidesGrid,l=t.snapGrid,h=e;if(h.originalEvent&&(h=h.originalEvent),i.allowTouchCallbacks&&t.emit(\"touchEnd\",h),i.allowTouchCallbacks=!1,!i.isTouched)return i.isMoved&&s.grabCursor&&t.setGrabCursor(!1),i.isMoved=!1,void(i.startMoving=!1);s.grabCursor&&i.isMoved&&i.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);var p,c=d.now(),u=c-i.touchStartTime;if(t.allowClick&&(t.updateClickedSlide(h),t.emit(\"tap\",h),u<300&&c-i.lastClickTime>300&&(i.clickTimeout&&clearTimeout(i.clickTimeout),i.clickTimeout=d.nextTick(function(){t&&!t.destroyed&&t.emit(\"click\",h)},300)),u<300&&c-i.lastClickTime<300&&(i.clickTimeout&&clearTimeout(i.clickTimeout),t.emit(\"doubleTap\",h))),i.lastClickTime=d.now(),d.nextTick(function(){t.destroyed||(t.allowClick=!0)}),!i.isTouched||!i.isMoved||!t.swipeDirection||0===a.diff||i.currentTranslate===i.startTranslate)return i.isTouched=!1,i.isMoved=!1,void(i.startMoving=!1);if(i.isTouched=!1,i.isMoved=!1,i.startMoving=!1,p=s.followFinger?r?t.translate:-t.translate:-i.currentTranslate,s.freeMode){if(p<-t.minTranslate())return void t.slideTo(t.activeIndex);if(p>-t.maxTranslate())return void(t.slides.length<l.length?t.slideTo(l.length-1):t.slideTo(t.slides.length-1));if(s.freeModeMomentum){if(i.velocities.length>1){var v=i.velocities.pop(),f=i.velocities.pop(),m=v.position-f.position,g=v.time-f.time;t.velocity=m/g,t.velocity/=2,Math.abs(t.velocity)<s.freeModeMinimumVelocity&&(t.velocity=0),(g>150||d.now()-v.time>300)&&(t.velocity=0)}else t.velocity=0;t.velocity*=s.freeModeMomentumVelocityRatio,i.velocities.length=0;var b=1e3*s.freeModeMomentumRatio,w=t.velocity*b,y=t.translate+w;r&&(y=-y);var x,E=!1,T=20*Math.abs(t.velocity)*s.freeModeMomentumBounceRatio;if(y<t.maxTranslate())s.freeModeMomentumBounce?(y+t.maxTranslate()<-T&&(y=t.maxTranslate()-T),x=t.maxTranslate(),E=!0,i.allowMomentumBounce=!0):y=t.maxTranslate();else if(y>t.minTranslate())s.freeModeMomentumBounce?(y-t.minTranslate()>T&&(y=t.minTranslate()+T),x=t.minTranslate(),E=!0,i.allowMomentumBounce=!0):y=t.minTranslate();else if(s.freeModeSticky){for(var S,C=0;C<l.length;C+=1)if(l[C]>-y){S=C;break}y=-(y=Math.abs(l[S]-y)<Math.abs(l[S-1]-y)||\"next\"===t.swipeDirection?l[S]:l[S-1])}if(0!==t.velocity)b=r?Math.abs((-y-t.translate)/t.velocity):Math.abs((y-t.translate)/t.velocity);else if(s.freeModeSticky)return void t.slideReset();s.freeModeMomentumBounce&&E?(t.updateProgress(x),t.setTransition(b),t.setTranslate(y),t.transitionStart(!0,t.swipeDirection),t.animating=!0,n.transitionEnd(function(){t&&!t.destroyed&&i.allowMomentumBounce&&(t.emit(\"momentumBounce\"),t.setTransition(s.speed),t.setTranslate(x),n.transitionEnd(function(){t&&!t.destroyed&&t.transitionEnd()}))})):t.velocity?(t.updateProgress(y),t.setTransition(b),t.setTranslate(y),t.transitionStart(!0,t.swipeDirection),t.animating||(t.animating=!0,n.transitionEnd(function(){t&&!t.destroyed&&t.transitionEnd()}))):t.updateProgress(y),t.updateActiveIndex(),t.updateSlidesClasses()}(!s.freeModeMomentum||u>=s.longSwipesMs)&&(t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses())}else{for(var M=0,z=t.slidesSizesGrid[0],P=0;P<o.length;P+=s.slidesPerGroup)void 0!==o[P+s.slidesPerGroup]?p>=o[P]&&p<o[P+s.slidesPerGroup]&&(M=P,z=o[P+s.slidesPerGroup]-o[P]):p>=o[P]&&(M=P,z=o[o.length-1]-o[o.length-2]);var k=(p-o[M])/z;if(u>s.longSwipesMs){if(!s.longSwipes)return void t.slideTo(t.activeIndex);\"next\"===t.swipeDirection&&(k>=s.longSwipesRatio?t.slideTo(M+s.slidesPerGroup):t.slideTo(M)),\"prev\"===t.swipeDirection&&(k>1-s.longSwipesRatio?t.slideTo(M+s.slidesPerGroup):t.slideTo(M))}else{if(!s.shortSwipes)return void t.slideTo(t.activeIndex);\"next\"===t.swipeDirection&&t.slideTo(M+s.slidesPerGroup),\"prev\"===t.swipeDirection&&t.slideTo(M)}}},S=function(){var e=this.params,t=this.el;if(!t||0!==t.offsetWidth){e.breakpoints&&this.setBreakpoint();var i=this.allowSlideNext,s=this.allowSlidePrev;if(this.allowSlideNext=!0,this.allowSlidePrev=!0,this.updateSize(),this.updateSlides(),e.freeMode){var a=Math.min(Math.max(this.translate,this.maxTranslate()),this.minTranslate());this.setTranslate(a),this.updateActiveIndex(),this.updateSlidesClasses(),e.autoHeight&&this.updateAutoHeight()}else this.updateSlidesClasses(),(\"auto\"===e.slidesPerView||e.slidesPerView>1)&&this.isEnd&&!this.params.centeredSlides?this.slideTo(this.slides.length-1,0,!1,!0):this.slideTo(this.activeIndex,0,!1,!0);this.allowSlidePrev=s,this.allowSlideNext=i}},C=function(e){this.allowClick||(this.params.preventClicks&&e.preventDefault(),this.params.preventClicksPropagation&&this.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))};var M={attachEvents:function(){var t=this.params,i=this.touchEvents,s=this.el,a=this.wrapperEl;this.onTouchStart=x.bind(this),this.onTouchMove=E.bind(this),this.onTouchEnd=T.bind(this),this.onClick=C.bind(this);var r=\"container\"===t.touchEventsTarget?s:a,n=!!t.nested;if(h.touch||!h.pointerEvents&&!h.prefixedPointerEvents){if(h.touch){var o=!(\"touchstart\"!==i.start||!h.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};r.addEventListener(i.start,this.onTouchStart,o),r.addEventListener(i.move,this.onTouchMove,h.passiveListener?{passive:!1,capture:n}:n),r.addEventListener(i.end,this.onTouchEnd,o)}(t.simulateTouch&&!y.ios&&!y.android||t.simulateTouch&&!h.touch&&y.ios)&&(r.addEventListener(\"mousedown\",this.onTouchStart,!1),e.addEventListener(\"mousemove\",this.onTouchMove,n),e.addEventListener(\"mouseup\",this.onTouchEnd,!1))}else r.addEventListener(i.start,this.onTouchStart,!1),e.addEventListener(i.move,this.onTouchMove,n),e.addEventListener(i.end,this.onTouchEnd,!1);(t.preventClicks||t.preventClicksPropagation)&&r.addEventListener(\"click\",this.onClick,!0),this.on(\"resize observerUpdate\",S)},detachEvents:function(){var t=this.params,i=this.touchEvents,s=this.el,a=this.wrapperEl,r=\"container\"===t.touchEventsTarget?s:a,n=!!t.nested;if(h.touch||!h.pointerEvents&&!h.prefixedPointerEvents){if(h.touch){var o=!(\"onTouchStart\"!==i.start||!h.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};r.removeEventListener(i.start,this.onTouchStart,o),r.removeEventListener(i.move,this.onTouchMove,n),r.removeEventListener(i.end,this.onTouchEnd,o)}(t.simulateTouch&&!y.ios&&!y.android||t.simulateTouch&&!h.touch&&y.ios)&&(r.removeEventListener(\"mousedown\",this.onTouchStart,!1),e.removeEventListener(\"mousemove\",this.onTouchMove,n),e.removeEventListener(\"mouseup\",this.onTouchEnd,!1))}else r.removeEventListener(i.start,this.onTouchStart,!1),e.removeEventListener(i.move,this.onTouchMove,n),e.removeEventListener(i.end,this.onTouchEnd,!1);(t.preventClicks||t.preventClicksPropagation)&&r.removeEventListener(\"click\",this.onClick,!0),this.off(\"resize observerUpdate\",S)}},z={setBreakpoint:function(){var e=this.activeIndex,t=this.loopedSlides;void 0===t&&(t=0);var i=this.params,s=i.breakpoints;if(s&&(!s||0!==Object.keys(s).length)){var a=this.getBreakpoint(s);if(a&&this.currentBreakpoint!==a){var r=a in s?s[a]:this.originalParams,n=i.loop&&r.slidesPerView!==i.slidesPerView;d.extend(this.params,r),d.extend(this,{allowTouchMove:this.params.allowTouchMove,allowSlideNext:this.params.allowSlideNext,allowSlidePrev:this.params.allowSlidePrev}),this.currentBreakpoint=a,n&&(this.loopDestroy(),this.loopCreate(),this.updateSlides(),this.slideTo(e-t+this.loopedSlides,0,!1)),this.emit(\"breakpoint\",r)}}},getBreakpoint:function(e){if(e){var i=!1,s=[];Object.keys(e).forEach(function(e){s.push(e)}),s.sort(function(e,t){return parseInt(e,10)-parseInt(t,10)});for(var a=0;a<s.length;a+=1){var r=s[a];r>=t.innerWidth&&!i&&(i=r)}return i||\"max\"}}},P=function(){return{isIE:!!t.navigator.userAgent.match(/Trident/g)||!!t.navigator.userAgent.match(/MSIE/g),isSafari:(e=t.navigator.userAgent.toLowerCase(),e.indexOf(\"safari\")>=0&&e.indexOf(\"chrome\")<0&&e.indexOf(\"android\")<0),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(t.navigator.userAgent)};var e}();var k={init:!0,direction:\"horizontal\",touchEventsTarget:\"container\",initialSlide:0,speed:300,preventIntercationOnTransition:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:\"slide\",breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:\"column\",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,watchOverflow:!1,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!0,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopFillGroupWithBlank:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:\"swiper-no-swiping\",noSwipingSelector:null,passiveListeners:!0,containerModifierClass:\"swiper-container-\",slideClass:\"swiper-slide\",slideBlankClass:\"swiper-slide-invisible-blank\",slideActiveClass:\"swiper-slide-active\",slideDuplicateActiveClass:\"swiper-slide-duplicate-active\",slideVisibleClass:\"swiper-slide-visible\",slideDuplicateClass:\"swiper-slide-duplicate\",slideNextClass:\"swiper-slide-next\",slideDuplicateNextClass:\"swiper-slide-duplicate-next\",slidePrevClass:\"swiper-slide-prev\",slideDuplicatePrevClass:\"swiper-slide-duplicate-prev\",wrapperClass:\"swiper-wrapper\",runCallbacksOnInit:!0},$={update:u,translate:v,transition:f,slide:m,loop:g,grabCursor:b,manipulation:w,events:M,breakpoints:z,checkOverflow:{checkOverflow:function(){var e=this.isLocked;this.isLocked=1===this.snapGrid.length,this.allowTouchMove=!this.isLocked,e&&e!==this.isLocked&&(this.isEnd=!1,this.navigation.update())}},classes:{addClasses:function(){var e=this.classNames,t=this.params,i=this.rtl,s=this.$el,a=[];a.push(t.direction),t.freeMode&&a.push(\"free-mode\"),h.flexbox||a.push(\"no-flexbox\"),t.autoHeight&&a.push(\"autoheight\"),i&&a.push(\"rtl\"),t.slidesPerColumn>1&&a.push(\"multirow\"),y.android&&a.push(\"android\"),y.ios&&a.push(\"ios\"),P.isIE&&(h.pointerEvents||h.prefixedPointerEvents)&&a.push(\"wp8-\"+t.direction),a.forEach(function(i){e.push(t.containerModifierClass+i)}),s.addClass(e.join(\" \"))},removeClasses:function(){var e=this.$el,t=this.classNames;e.removeClass(t.join(\" \"))}},images:{loadImage:function(e,i,s,a,r,n){var o;function l(){n&&n()}e.complete&&r?l():i?((o=new t.Image).onload=l,o.onerror=l,a&&(o.sizes=a),s&&(o.srcset=s),i&&(o.src=i)):l()},preloadImages:function(){var e=this;function t(){void 0!==e&&null!==e&&e&&!e.destroyed&&(void 0!==e.imagesLoaded&&(e.imagesLoaded+=1),e.imagesLoaded===e.imagesToLoad.length&&(e.params.updateOnImagesReady&&e.update(),e.emit(\"imagesReady\")))}e.imagesToLoad=e.$el.find(\"img\");for(var i=0;i<e.imagesToLoad.length;i+=1){var s=e.imagesToLoad[i];e.loadImage(s,s.currentSrc||s.getAttribute(\"src\"),s.srcset||s.getAttribute(\"srcset\"),s.sizes||s.getAttribute(\"sizes\"),!0,t)}}}},L={},I=function(e){function t(){for(var i,a,r,n=[],o=arguments.length;o--;)n[o]=arguments[o];1===n.length&&n[0].constructor&&n[0].constructor===Object?a=n[0]:(i=(r=n)[0],a=r[1]);a||(a={}),a=d.extend({},a),i&&!a.el&&(a.el=i),e.call(this,a),Object.keys($).forEach(function(e){Object.keys($[e]).forEach(function(i){t.prototype[i]||(t.prototype[i]=$[e][i])})});var l=this;void 0===l.modules&&(l.modules={}),Object.keys(l.modules).forEach(function(e){var t=l.modules[e];if(t.params){var i=Object.keys(t.params)[0],s=t.params[i];if(\"object\"!=typeof s)return;if(!(i in a&&\"enabled\"in s))return;!0===a[i]&&(a[i]={enabled:!0}),\"object\"!=typeof a[i]||\"enabled\"in a[i]||(a[i].enabled=!0),a[i]||(a[i]={enabled:!1})}});var p=d.extend({},k);l.useModulesParams(p),l.params=d.extend({},p,L,a),l.originalParams=d.extend({},l.params),l.passedParams=d.extend({},a),l.$=s;var c=s(l.params.el);if(i=c[0]){if(c.length>1){var u=[];return c.each(function(e,i){var s=d.extend({},a,{el:i});u.push(new t(s))}),u}i.swiper=l,c.data(\"swiper\",l);var v,f,m=c.children(\".\"+l.params.wrapperClass);return d.extend(l,{$el:c,el:i,$wrapperEl:m,wrapperEl:m[0],classNames:[],slides:s(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:function(){return\"horizontal\"===l.params.direction},isVertical:function(){return\"vertical\"===l.params.direction},rtl:\"horizontal\"===l.params.direction&&(\"rtl\"===i.dir.toLowerCase()||\"rtl\"===c.css(\"direction\")),wrongRTL:\"-webkit-box\"===m.css(\"display\"),activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,progress:0,velocity:0,animating:!1,allowSlideNext:l.params.allowSlideNext,allowSlidePrev:l.params.allowSlidePrev,touchEvents:(v=[\"touchstart\",\"touchmove\",\"touchend\"],f=[\"mousedown\",\"mousemove\",\"mouseup\"],h.pointerEvents?f=[\"pointerdown\",\"pointermove\",\"pointerup\"]:h.prefixedPointerEvents&&(f=[\"MSPointerDown\",\"MSPointerMove\",\"MSPointerUp\"]),l.touchEventsTouch={start:v[0],move:v[1],end:v[2]},l.touchEventsDesktop={start:f[0],move:f[1],end:f[2]},h.touch||!l.params.simulateTouch?l.touchEventsTouch:l.touchEventsDesktop),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,formElements:\"input, select, option, textarea, button, video\",lastClickTime:d.now(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:l.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),l.useModules(),l.params.init&&l.init(),l}}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var i={extendedDefaults:{configurable:!0},defaults:{configurable:!0},Class:{configurable:!0},$:{configurable:!0}};return t.prototype.slidesPerViewDynamic=function(){var e=this.params,t=this.slides,i=this.slidesGrid,s=this.size,a=this.activeIndex,r=1;if(e.centeredSlides){for(var n,o=t[a].swiperSlideSize,l=a+1;l<t.length;l+=1)t[l]&&!n&&(r+=1,(o+=t[l].swiperSlideSize)>s&&(n=!0));for(var d=a-1;d>=0;d-=1)t[d]&&!n&&(r+=1,(o+=t[d].swiperSlideSize)>s&&(n=!0))}else for(var h=a+1;h<t.length;h+=1)i[h]-i[a]<s&&(r+=1);return r},t.prototype.update=function(){var e=this;e&&!e.destroyed&&(e.updateSize(),e.updateSlides(),e.updateProgress(),e.updateSlidesClasses(),e.params.freeMode?(t(),e.params.autoHeight&&e.updateAutoHeight()):((\"auto\"===e.params.slidesPerView||e.params.slidesPerView>1)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0))||t(),e.emit(\"update\"));function t(){var t=e.rtl?-1*e.translate:e.translate,i=Math.min(Math.max(t,e.maxTranslate()),e.minTranslate());e.setTranslate(i),e.updateActiveIndex(),e.updateSlidesClasses()}},t.prototype.init=function(){this.initialized||(this.emit(\"beforeInit\"),this.params.breakpoints&&this.setBreakpoint(),this.addClasses(),this.params.loop&&this.loopCreate(),this.updateSize(),this.updateSlides(),this.params.watchOverflow&&this.checkOverflow(),this.params.grabCursor&&this.setGrabCursor(),this.params.preloadImages&&this.preloadImages(),this.params.loop?this.slideTo(this.params.initialSlide+this.loopedSlides,0,this.params.runCallbacksOnInit):this.slideTo(this.params.initialSlide,0,this.params.runCallbacksOnInit),this.attachEvents(),this.initialized=!0,this.emit(\"init\"))},t.prototype.destroy=function(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0);var i=this,s=i.params,a=i.$el,r=i.$wrapperEl,n=i.slides;i.emit(\"beforeDestroy\"),i.initialized=!1,i.detachEvents(),s.loop&&i.loopDestroy(),t&&(i.removeClasses(),a.removeAttr(\"style\"),r.removeAttr(\"style\"),n&&n.length&&n.removeClass([s.slideVisibleClass,s.slideActiveClass,s.slideNextClass,s.slidePrevClass].join(\" \")).removeAttr(\"style\").removeAttr(\"data-swiper-slide-index\").removeAttr(\"data-swiper-column\").removeAttr(\"data-swiper-row\")),i.emit(\"destroy\"),Object.keys(i.eventsListeners).forEach(function(e){i.off(e)}),!1!==e&&(i.$el[0].swiper=null,i.$el.data(\"swiper\",null),d.deleteProps(i)),i.destroyed=!0},t.extendDefaults=function(e){d.extend(L,e)},i.extendedDefaults.get=function(){return L},i.defaults.get=function(){return k},i.Class.get=function(){return e},i.$.get=function(){return s},Object.defineProperties(t,i),t}(p),D={name:\"device\",proto:{device:y},static:{device:y}},O={name:\"support\",proto:{support:h},static:{support:h}},A={name:\"browser\",proto:{browser:P},static:{browser:P}},H={name:\"resize\",create:function(){var e=this;d.extend(e,{resize:{resizeHandler:function(){e&&!e.destroyed&&e.initialized&&(e.emit(\"beforeResize\"),e.emit(\"resize\"))},orientationChangeHandler:function(){e&&!e.destroyed&&e.initialized&&e.emit(\"orientationchange\")}}})},on:{init:function(){t.addEventListener(\"resize\",this.resize.resizeHandler),t.addEventListener(\"orientationchange\",this.resize.orientationChangeHandler)},destroy:function(){t.removeEventListener(\"resize\",this.resize.resizeHandler),t.removeEventListener(\"orientationchange\",this.resize.orientationChangeHandler)}}},N={func:t.MutationObserver||t.WebkitMutationObserver,attach:function(e,t){void 0===t&&(t={});var i=this,s=new(0,N.func)(function(e){e.forEach(function(e){i.emit(\"observerUpdate\",e)})});s.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:void 0===t.childList||t.childList,characterData:void 0===t.characterData||t.characterData}),i.observer.observers.push(s)},init:function(){if(h.observer&&this.params.observer){if(this.params.observeParents)for(var e=this.$el.parents(),t=0;t<e.length;t+=1)this.observer.attach(e[t]);this.observer.attach(this.$el[0],{childList:!1}),this.observer.attach(this.$wrapperEl[0],{attributes:!1})}},destroy:function(){this.observer.observers.forEach(function(e){e.disconnect()}),this.observer.observers=[]}},X={name:\"observer\",params:{observer:!1,observeParents:!1},create:function(){d.extend(this,{observer:{init:N.init.bind(this),attach:N.attach.bind(this),destroy:N.destroy.bind(this),observers:[]}})},on:{init:function(){this.observer.init()},destroy:function(){this.observer.destroy()}}},Y={update:function(e){var t=this,i=t.params,s=i.slidesPerView,a=i.slidesPerGroup,r=i.centeredSlides,n=t.virtual,o=n.from,l=n.to,h=n.slides,p=n.slidesGrid,c=n.renderSlide,u=n.offset;t.updateActiveIndex();var v,f,m,g=t.activeIndex||0;v=t.rtl&&t.isHorizontal()?\"right\":t.isHorizontal()?\"left\":\"top\",r?(f=Math.floor(s/2)+a,m=Math.floor(s/2)+a):(f=s+(a-1),m=a);var b=Math.max((g||0)-m,0),w=Math.min((g||0)+f,h.length-1),y=(t.slidesGrid[b]||0)-(t.slidesGrid[0]||0);function x(){t.updateSlides(),t.updateProgress(),t.updateSlidesClasses(),t.lazy&&t.params.lazy.enabled&&t.lazy.load()}if(d.extend(t.virtual,{from:b,to:w,offset:y,slidesGrid:t.slidesGrid}),o===b&&l===w&&!e)return t.slidesGrid!==p&&y!==u&&t.slides.css(v,y+\"px\"),void t.updateProgress();if(t.params.virtual.renderExternal)return t.params.virtual.renderExternal.call(t,{offset:y,from:b,to:w,slides:function(){for(var e=[],t=b;t<=w;t+=1)e.push(h[t]);return e}()}),void x();var E=[],T=[];if(e)t.$wrapperEl.find(\".\"+t.params.slideClass).remove();else for(var S=o;S<=l;S+=1)(S<b||S>w)&&t.$wrapperEl.find(\".\"+t.params.slideClass+'[data-swiper-slide-index=\"'+S+'\"]').remove();for(var C=0;C<h.length;C+=1)C>=b&&C<=w&&(void 0===l||e?T.push(C):(C>l&&T.push(C),C<o&&E.push(C)));T.forEach(function(e){t.$wrapperEl.append(c(h[e],e))}),E.sort(function(e,t){return e<t}).forEach(function(e){t.$wrapperEl.prepend(c(h[e],e))}),t.$wrapperEl.children(\".swiper-slide\").css(v,y+\"px\"),x()},renderSlide:function(e,t){var i=this.params.virtual;if(i.cache&&this.virtual.cache[t])return this.virtual.cache[t];var a=i.renderSlide?s(i.renderSlide.call(this,e,t)):s('<div class=\"'+this.params.slideClass+'\" data-swiper-slide-index=\"'+t+'\">'+e+\"</div>\");return a.attr(\"data-swiper-slide-index\")||a.attr(\"data-swiper-slide-index\",t),i.cache&&(this.virtual.cache[t]=a),a},appendSlide:function(e){this.virtual.slides.push(e),this.virtual.update(!0)},prependSlide:function(e){if(this.virtual.slides.unshift(e),this.params.virtual.cache){var t=this.virtual.cache,i={};Object.keys(t).forEach(function(e){i[e+1]=t[e]}),this.virtual.cache=i}this.virtual.update(!0),this.slideNext(0)}},B={name:\"virtual\",params:{virtual:{enabled:!1,slides:[],cache:!0,renderSlide:null,renderExternal:null}},create:function(){d.extend(this,{virtual:{update:Y.update.bind(this),appendSlide:Y.appendSlide.bind(this),prependSlide:Y.prependSlide.bind(this),renderSlide:Y.renderSlide.bind(this),slides:this.params.virtual.slides,cache:{}}})},on:{beforeInit:function(){if(this.params.virtual.enabled){this.classNames.push(this.params.containerModifierClass+\"virtual\");var e={watchSlidesProgress:!0};d.extend(this.params,e),d.extend(this.originalParams,e),this.virtual.update()}},setTranslate:function(){this.params.virtual.enabled&&this.virtual.update()}}},G={handle:function(i){var s=i;s.originalEvent&&(s=s.originalEvent);var a=s.keyCode||s.charCode;if(!this.allowSlideNext&&(this.isHorizontal()&&39===a||this.isVertical()&&40===a))return!1;if(!this.allowSlidePrev&&(this.isHorizontal()&&37===a||this.isVertical()&&38===a))return!1;if(!(s.shiftKey||s.altKey||s.ctrlKey||s.metaKey||e.activeElement&&e.activeElement.nodeName&&(\"input\"===e.activeElement.nodeName.toLowerCase()||\"textarea\"===e.activeElement.nodeName.toLowerCase()))){if(this.params.keyboard.onlyInViewport&&(37===a||39===a||38===a||40===a)){var r=!1;if(this.$el.parents(\".\"+this.params.slideClass).length>0&&0===this.$el.parents(\".\"+this.params.slideActiveClass).length)return;var n=t.innerWidth,o=t.innerHeight,l=this.$el.offset();this.rtl&&(l.left-=this.$el[0].scrollLeft);for(var d=[[l.left,l.top],[l.left+this.width,l.top],[l.left,l.top+this.height],[l.left+this.width,l.top+this.height]],h=0;h<d.length;h+=1){var p=d[h];p[0]>=0&&p[0]<=n&&p[1]>=0&&p[1]<=o&&(r=!0)}if(!r)return}this.isHorizontal()?(37!==a&&39!==a||(s.preventDefault?s.preventDefault():s.returnValue=!1),(39===a&&!this.rtl||37===a&&this.rtl)&&this.slideNext(),(37===a&&!this.rtl||39===a&&this.rtl)&&this.slidePrev()):(38!==a&&40!==a||(s.preventDefault?s.preventDefault():s.returnValue=!1),40===a&&this.slideNext(),38===a&&this.slidePrev()),this.emit(\"keyPress\",a)}},enable:function(){this.keyboard.enabled||(s(e).on(\"keydown\",this.keyboard.handle),this.keyboard.enabled=!0)},disable:function(){this.keyboard.enabled&&(s(e).off(\"keydown\",this.keyboard.handle),this.keyboard.enabled=!1)}},V={name:\"keyboard\",params:{keyboard:{enabled:!1,onlyInViewport:!0}},create:function(){d.extend(this,{keyboard:{enabled:!1,enable:G.enable.bind(this),disable:G.disable.bind(this),handle:G.handle.bind(this)}})},on:{init:function(){this.params.keyboard.enabled&&this.keyboard.enable()},destroy:function(){this.keyboard.enabled&&this.keyboard.disable()}}};var R={lastScrollTime:d.now(),event:t.navigator.userAgent.indexOf(\"firefox\")>-1?\"DOMMouseScroll\":function(){var t=\"onwheel\"in e;if(!t){var i=e.createElement(\"div\");i.setAttribute(\"onwheel\",\"return;\"),t=\"function\"==typeof i.onwheel}return!t&&e.implementation&&e.implementation.hasFeature&&!0!==e.implementation.hasFeature(\"\",\"\")&&(t=e.implementation.hasFeature(\"Events.wheel\",\"3.0\")),t}()?\"wheel\":\"mousewheel\",normalize:function(e){var t=0,i=0,s=0,a=0;return\"detail\"in e&&(i=e.detail),\"wheelDelta\"in e&&(i=-e.wheelDelta/120),\"wheelDeltaY\"in e&&(i=-e.wheelDeltaY/120),\"wheelDeltaX\"in e&&(t=-e.wheelDeltaX/120),\"axis\"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=i,i=0),s=10*t,a=10*i,\"deltaY\"in e&&(a=e.deltaY),\"deltaX\"in e&&(s=e.deltaX),(s||a)&&e.deltaMode&&(1===e.deltaMode?(s*=40,a*=40):(s*=800,a*=800)),s&&!t&&(t=s<1?-1:1),a&&!i&&(i=a<1?-1:1),{spinX:t,spinY:i,pixelX:s,pixelY:a}},handle:function(e){var i=e,s=this,a=s.params.mousewheel;i.originalEvent&&(i=i.originalEvent);var r=0,n=s.rtl?-1:1,o=R.normalize(i);if(a.forceToAxis)if(s.isHorizontal()){if(!(Math.abs(o.pixelX)>Math.abs(o.pixelY)))return!0;r=o.pixelX*n}else{if(!(Math.abs(o.pixelY)>Math.abs(o.pixelX)))return!0;r=o.pixelY}else r=Math.abs(o.pixelX)>Math.abs(o.pixelY)?-o.pixelX*n:-o.pixelY;if(0===r)return!0;if(a.invert&&(r=-r),s.params.freeMode){var l=s.getTranslate()+r*a.sensitivity,h=s.isBeginning,p=s.isEnd;if(l>=s.minTranslate()&&(l=s.minTranslate()),l<=s.maxTranslate()&&(l=s.maxTranslate()),s.setTransition(0),s.setTranslate(l),s.updateProgress(),s.updateActiveIndex(),s.updateSlidesClasses(),(!h&&s.isBeginning||!p&&s.isEnd)&&s.updateSlidesClasses(),s.params.freeModeSticky&&(clearTimeout(s.mousewheel.timeout),s.mousewheel.timeout=d.nextTick(function(){s.slideReset()},300)),s.emit(\"scroll\",i),s.params.autoplay&&s.params.autoplayDisableOnInteraction&&s.stopAutoplay(),l===s.minTranslate()||l===s.maxTranslate())return!0}else{if(d.now()-s.mousewheel.lastScrollTime>60)if(r<0)if(s.isEnd&&!s.params.loop||s.animating){if(a.releaseOnEdges)return!0}else s.slideNext(),s.emit(\"scroll\",i);else if(s.isBeginning&&!s.params.loop||s.animating){if(a.releaseOnEdges)return!0}else s.slidePrev(),s.emit(\"scroll\",i);s.mousewheel.lastScrollTime=(new t.Date).getTime()}return i.preventDefault?i.preventDefault():i.returnValue=!1,!1},enable:function(){if(!R.event)return!1;if(this.mousewheel.enabled)return!1;var e=this.$el;return\"container\"!==this.params.mousewheel.eventsTarged&&(e=s(this.params.mousewheel.eventsTarged)),e.on(R.event,this.mousewheel.handle),this.mousewheel.enabled=!0,!0},disable:function(){if(!R.event)return!1;if(!this.mousewheel.enabled)return!1;var e=this.$el;return\"container\"!==this.params.mousewheel.eventsTarged&&(e=s(this.params.mousewheel.eventsTarged)),e.off(R.event,this.mousewheel.handle),this.mousewheel.enabled=!1,!0}},F={update:function(){var e=this.params.navigation;if(!this.params.loop){var t=this.navigation,i=t.$nextEl,s=t.$prevEl;s&&s.length>0&&(this.isBeginning?s.addClass(e.disabledClass):s.removeClass(e.disabledClass),s[this.params.watchOverflow&&this.isLocked?\"addClass\":\"removeClass\"](e.lockClass)),i&&i.length>0&&(this.isEnd?i.addClass(e.disabledClass):i.removeClass(e.disabledClass),i[this.params.watchOverflow&&this.isLocked?\"addClass\":\"removeClass\"](e.lockClass))}},init:function(){var e,t,i=this,a=i.params.navigation;(a.nextEl||a.prevEl)&&(a.nextEl&&(e=s(a.nextEl),i.params.uniqueNavElements&&\"string\"==typeof a.nextEl&&e.length>1&&1===i.$el.find(a.nextEl).length&&(e=i.$el.find(a.nextEl))),a.prevEl&&(t=s(a.prevEl),i.params.uniqueNavElements&&\"string\"==typeof a.prevEl&&t.length>1&&1===i.$el.find(a.prevEl).length&&(t=i.$el.find(a.prevEl))),e&&e.length>0&&e.on(\"click\",function(e){e.preventDefault(),i.isEnd&&!i.params.loop||i.slideNext()}),t&&t.length>0&&t.on(\"click\",function(e){e.preventDefault(),i.isBeginning&&!i.params.loop||i.slidePrev()}),d.extend(i.navigation,{$nextEl:e,nextEl:e&&e[0],$prevEl:t,prevEl:t&&t[0]}))},destroy:function(){var e=this.navigation,t=e.$nextEl,i=e.$prevEl;t&&t.length&&(t.off(\"click\"),t.removeClass(this.params.navigation.disabledClass)),i&&i.length&&(i.off(\"click\"),i.removeClass(this.params.navigation.disabledClass))}},W={update:function(){var e=this.rtl,t=this.params.pagination;if(t.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var i,a=this.virtual&&this.params.virtual.enabled?this.virtual.slides.length:this.slides.length,r=this.pagination.$el,n=this.params.loop?Math.ceil((a-2*this.loopedSlides)/this.params.slidesPerGroup):this.snapGrid.length;if(this.params.loop?((i=Math.ceil((this.activeIndex-this.loopedSlides)/this.params.slidesPerGroup))>a-1-2*this.loopedSlides&&(i-=a-2*this.loopedSlides),i>n-1&&(i-=n),i<0&&\"bullets\"!==this.params.paginationType&&(i=n+i)):i=void 0!==this.snapIndex?this.snapIndex:this.activeIndex||0,\"bullets\"===t.type&&this.pagination.bullets&&this.pagination.bullets.length>0){var o,l,d,h=this.pagination.bullets;if(t.dynamicBullets&&(this.pagination.bulletSize=h.eq(0)[this.isHorizontal()?\"outerWidth\":\"outerHeight\"](!0),r.css(this.isHorizontal()?\"width\":\"height\",this.pagination.bulletSize*(t.dynamicMainBullets+4)+\"px\"),t.dynamicMainBullets>1&&void 0!==this.previousIndex&&(i>this.previousIndex&&this.pagination.dynamicBulletIndex<t.dynamicMainBullets-1?this.pagination.dynamicBulletIndex+=1:i<this.previousIndex&&this.pagination.dynamicBulletIndex>0&&(this.pagination.dynamicBulletIndex-=1)),o=i-this.pagination.dynamicBulletIndex,d=((l=o+(t.dynamicMainBullets-1))+o)/2),h.removeClass(t.bulletActiveClass+\" \"+t.bulletActiveClass+\"-next \"+t.bulletActiveClass+\"-next-next \"+t.bulletActiveClass+\"-prev \"+t.bulletActiveClass+\"-prev-prev \"+t.bulletActiveClass+\"-main\"),r.length>1)h.each(function(e,a){var r=s(a),n=r.index();n===i&&r.addClass(t.bulletActiveClass),t.dynamicBullets&&(n>=o&&n<=l&&r.addClass(t.bulletActiveClass+\"-main\"),n===o&&r.prev().addClass(t.bulletActiveClass+\"-prev\").prev().addClass(t.bulletActiveClass+\"-prev-prev\"),n===l&&r.next().addClass(t.bulletActiveClass+\"-next\").next().addClass(t.bulletActiveClass+\"-next-next\"))});else if(h.eq(i).addClass(t.bulletActiveClass),t.dynamicBullets){for(var p=h.eq(o),c=h.eq(l),u=o;u<=l;u+=1)h.eq(u).addClass(t.bulletActiveClass+\"-main\");p.prev().addClass(t.bulletActiveClass+\"-prev\").prev().addClass(t.bulletActiveClass+\"-prev-prev\"),c.next().addClass(t.bulletActiveClass+\"-next\").next().addClass(t.bulletActiveClass+\"-next-next\")}if(t.dynamicBullets){var v=Math.min(h.length,t.dynamicMainBullets+4),f=(this.pagination.bulletSize*v-this.pagination.bulletSize)/2-d*this.pagination.bulletSize,m=e?\"right\":\"left\";h.css(this.isHorizontal()?m:\"top\",f+\"px\")}}if(\"fraction\"===t.type&&(r.find(\".\"+t.currentClass).text(i+1),r.find(\".\"+t.totalClass).text(n)),\"progressbar\"===t.type){var g=(i+1)/n,b=g,w=1;this.isHorizontal()||(w=g,b=1),r.find(\".\"+t.progressbarFillClass).transform(\"translate3d(0,0,0) scaleX(\"+b+\") scaleY(\"+w+\")\").transition(this.params.speed)}\"custom\"===t.type&&t.renderCustom?(r.html(t.renderCustom(this,i+1,n)),this.emit(\"paginationRender\",this,r[0])):this.emit(\"paginationUpdate\",this,r[0]),r[this.params.watchOverflow&&this.isLocked?\"addClass\":\"removeClass\"](t.lockClass)}},render:function(){var e=this.params.pagination;if(e.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var t=this.virtual&&this.params.virtual.enabled?this.virtual.slides.length:this.slides.length,i=this.pagination.$el,s=\"\";if(\"bullets\"===e.type){for(var a=this.params.loop?Math.ceil((t-2*this.loopedSlides)/this.params.slidesPerGroup):this.snapGrid.length,r=0;r<a;r+=1)e.renderBullet?s+=e.renderBullet.call(this,r,e.bulletClass):s+=\"<\"+e.bulletElement+' class=\"'+e.bulletClass+'\"></'+e.bulletElement+\">\";i.html(s),this.pagination.bullets=i.find(\".\"+e.bulletClass)}\"fraction\"===e.type&&(s=e.renderFraction?e.renderFraction.call(this,e.currentClass,e.totalClass):'<span class=\"'+e.currentClass+'\"></span> / <span class=\"'+e.totalClass+'\"></span>',i.html(s)),\"progressbar\"===e.type&&(s=e.renderProgressbar?e.renderProgressbar.call(this,e.progressbarFillClass):'<span class=\"'+e.progressbarFillClass+'\"></span>',i.html(s)),\"custom\"!==e.type&&this.emit(\"paginationRender\",this.pagination.$el[0])}},init:function(){var e=this,t=e.params.pagination;if(t.el){var i=s(t.el);0!==i.length&&(e.params.uniqueNavElements&&\"string\"==typeof t.el&&i.length>1&&1===e.$el.find(t.el).length&&(i=e.$el.find(t.el)),\"bullets\"===t.type&&t.clickable&&i.addClass(t.clickableClass),i.addClass(t.modifierClass+t.type),\"bullets\"===t.type&&t.dynamicBullets&&(i.addClass(\"\"+t.modifierClass+t.type+\"-dynamic\"),e.pagination.dynamicBulletIndex=0,t.dynamicMainBullets<1&&(t.dynamicMainBullets=1)),t.clickable&&i.on(\"click\",\".\"+t.bulletClass,function(t){t.preventDefault();var i=s(this).index()*e.params.slidesPerGroup;e.params.loop&&(i+=e.loopedSlides),e.slideTo(i)}),d.extend(e.pagination,{$el:i,el:i[0]}))}},destroy:function(){var e=this.params.pagination;if(e.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var t=this.pagination.$el;t.removeClass(e.hiddenClass),t.removeClass(e.modifierClass+e.type),this.pagination.bullets&&this.pagination.bullets.removeClass(e.bulletActiveClass),e.clickable&&t.off(\"click\",\".\"+e.bulletClass)}}},q={setTranslate:function(){if(this.params.scrollbar.el&&this.scrollbar.el){var e=this.scrollbar,t=this.rtl,i=this.progress,s=e.dragSize,a=e.trackSize,r=e.$dragEl,n=e.$el,o=this.params.scrollbar,l=s,d=(a-s)*i;t&&this.isHorizontal()?(d=-d)>0?(l=s-d,d=0):-d+s>a&&(l=a+d):d<0?(l=s+d,d=0):d+s>a&&(l=a-d),this.isHorizontal()?(h.transforms3d?r.transform(\"translate3d(\"+d+\"px, 0, 0)\"):r.transform(\"translateX(\"+d+\"px)\"),r[0].style.width=l+\"px\"):(h.transforms3d?r.transform(\"translate3d(0px, \"+d+\"px, 0)\"):r.transform(\"translateY(\"+d+\"px)\"),r[0].style.height=l+\"px\"),o.hide&&(clearTimeout(this.scrollbar.timeout),n[0].style.opacity=1,this.scrollbar.timeout=setTimeout(function(){n[0].style.opacity=0,n.transition(400)},1e3))}},setTransition:function(e){this.params.scrollbar.el&&this.scrollbar.el&&this.scrollbar.$dragEl.transition(e)},updateSize:function(){if(this.params.scrollbar.el&&this.scrollbar.el){var e=this.scrollbar,t=e.$dragEl,i=e.$el;t[0].style.width=\"\",t[0].style.height=\"\";var s,a=this.isHorizontal()?i[0].offsetWidth:i[0].offsetHeight,r=this.size/this.virtualSize,n=r*(a/this.size);s=\"auto\"===this.params.scrollbar.dragSize?a*r:parseInt(this.params.scrollbar.dragSize,10),this.isHorizontal()?t[0].style.width=s+\"px\":t[0].style.height=s+\"px\",i[0].style.display=r>=1?\"none\":\"\",this.params.scrollbarHide&&(i[0].style.opacity=0),d.extend(e,{trackSize:a,divider:r,moveDivider:n,dragSize:s}),e.$el[this.params.watchOverflow&&this.isLocked?\"addClass\":\"removeClass\"](this.params.scrollbar.lockClass)}},setDragPosition:function(e){var t,i=this.scrollbar,s=i.$el,a=i.dragSize,r=i.trackSize;t=((this.isHorizontal()?\"touchstart\"===e.type||\"touchmove\"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:\"touchstart\"===e.type||\"touchmove\"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY)-s.offset()[this.isHorizontal()?\"left\":\"top\"]-a/2)/(r-a),t=Math.max(Math.min(t,1),0),this.rtl&&(t=1-t);var n=this.minTranslate()+(this.maxTranslate()-this.minTranslate())*t;this.updateProgress(n),this.setTranslate(n),this.updateActiveIndex(),this.updateSlidesClasses()},onDragStart:function(e){var t=this.params.scrollbar,i=this.scrollbar,s=this.$wrapperEl,a=i.$el,r=i.$dragEl;this.scrollbar.isTouched=!0,e.preventDefault(),e.stopPropagation(),s.transition(100),r.transition(100),i.setDragPosition(e),clearTimeout(this.scrollbar.dragTimeout),a.transition(0),t.hide&&a.css(\"opacity\",1),this.emit(\"scrollbarDragStart\",e)},onDragMove:function(e){var t=this.scrollbar,i=this.$wrapperEl,s=t.$el,a=t.$dragEl;this.scrollbar.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,t.setDragPosition(e),i.transition(0),s.transition(0),a.transition(0),this.emit(\"scrollbarDragMove\",e))},onDragEnd:function(e){var t=this.params.scrollbar,i=this.scrollbar.$el;this.scrollbar.isTouched&&(this.scrollbar.isTouched=!1,t.hide&&(clearTimeout(this.scrollbar.dragTimeout),this.scrollbar.dragTimeout=d.nextTick(function(){i.css(\"opacity\",0),i.transition(400)},1e3)),this.emit(\"scrollbarDragEnd\",e),t.snapOnRelease&&this.slideReset())},enableDraggable:function(){if(this.params.scrollbar.el){var t=this.scrollbar,i=this.touchEvents,s=this.touchEventsDesktop,a=this.params,r=t.$el[0],n=!(!h.passiveListener||!a.passiveListener)&&{passive:!1,capture:!1},o=!(!h.passiveListener||!a.passiveListener)&&{passive:!0,capture:!1};h.touch||!h.pointerEvents&&!h.prefixedPointerEvents?(h.touch&&(r.addEventListener(i.start,this.scrollbar.onDragStart,n),r.addEventListener(i.move,this.scrollbar.onDragMove,n),r.addEventListener(i.end,this.scrollbar.onDragEnd,o)),(a.simulateTouch&&!y.ios&&!y.android||a.simulateTouch&&!h.touch&&y.ios)&&(r.addEventListener(\"mousedown\",this.scrollbar.onDragStart,n),e.addEventListener(\"mousemove\",this.scrollbar.onDragMove,n),e.addEventListener(\"mouseup\",this.scrollbar.onDragEnd,o))):(r.addEventListener(s.start,this.scrollbar.onDragStart,n),e.addEventListener(s.move,this.scrollbar.onDragMove,n),e.addEventListener(s.end,this.scrollbar.onDragEnd,o))}},disableDraggable:function(){if(this.params.scrollbar.el){var t=this.scrollbar,i=this.touchEvents,s=this.touchEventsDesktop,a=this.params,r=t.$el[0],n=!(!h.passiveListener||!a.passiveListener)&&{passive:!1,capture:!1},o=!(!h.passiveListener||!a.passiveListener)&&{passive:!0,capture:!1};h.touch||!h.pointerEvents&&!h.prefixedPointerEvents?(h.touch&&(r.removeEventListener(i.start,this.scrollbar.onDragStart,n),r.removeEventListener(i.move,this.scrollbar.onDragMove,n),r.removeEventListener(i.end,this.scrollbar.onDragEnd,o)),(a.simulateTouch&&!y.ios&&!y.android||a.simulateTouch&&!h.touch&&y.ios)&&(r.removeEventListener(\"mousedown\",this.scrollbar.onDragStart,n),e.removeEventListener(\"mousemove\",this.scrollbar.onDragMove,n),e.removeEventListener(\"mouseup\",this.scrollbar.onDragEnd,o))):(r.removeEventListener(s.start,this.scrollbar.onDragStart,n),e.removeEventListener(s.move,this.scrollbar.onDragMove,n),e.removeEventListener(s.end,this.scrollbar.onDragEnd,o))}},init:function(){if(this.params.scrollbar.el){var e=this.scrollbar,t=this.$el,i=this.params.scrollbar,a=s(i.el);this.params.uniqueNavElements&&\"string\"==typeof i.el&&a.length>1&&1===t.find(i.el).length&&(a=t.find(i.el));var r=a.find(\".\"+this.params.scrollbar.dragClass);0===r.length&&(r=s('<div class=\"'+this.params.scrollbar.dragClass+'\"></div>'),a.append(r)),d.extend(e,{$el:a,el:a[0],$dragEl:r,dragEl:r[0]}),i.draggable&&e.enableDraggable()}},destroy:function(){this.scrollbar.disableDraggable()}},j={setTransform:function(e,t){var i=this.rtl,a=s(e),r=i?-1:1,n=a.attr(\"data-swiper-parallax\")||\"0\",o=a.attr(\"data-swiper-parallax-x\"),l=a.attr(\"data-swiper-parallax-y\"),d=a.attr(\"data-swiper-parallax-scale\"),h=a.attr(\"data-swiper-parallax-opacity\");if(o||l?(o=o||\"0\",l=l||\"0\"):this.isHorizontal()?(o=n,l=\"0\"):(l=n,o=\"0\"),o=o.indexOf(\"%\")>=0?parseInt(o,10)*t*r+\"%\":o*t*r+\"px\",l=l.indexOf(\"%\")>=0?parseInt(l,10)*t+\"%\":l*t+\"px\",void 0!==h&&null!==h){var p=h-(h-1)*(1-Math.abs(t));a[0].style.opacity=p}if(void 0===d||null===d)a.transform(\"translate3d(\"+o+\", \"+l+\", 0px)\");else{var c=d-(d-1)*(1-Math.abs(t));a.transform(\"translate3d(\"+o+\", \"+l+\", 0px) scale(\"+c+\")\")}},setTranslate:function(){var e=this,t=e.$el,i=e.slides,a=e.progress,r=e.snapGrid;t.children(\"[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]\").each(function(t,i){e.parallax.setTransform(i,a)}),i.each(function(t,i){var n=i.progress;e.params.slidesPerGroup>1&&\"auto\"!==e.params.slidesPerView&&(n+=Math.ceil(t/2)-a*(r.length-1)),n=Math.min(Math.max(n,-1),1),s(i).find(\"[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]\").each(function(t,i){e.parallax.setTransform(i,n)})})},setTransition:function(e){void 0===e&&(e=this.params.speed);this.$el.find(\"[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]\").each(function(t,i){var a=s(i),r=parseInt(a.attr(\"data-swiper-parallax-duration\"),10)||e;0===e&&(r=0),a.transition(r)})}},K={getDistanceBetweenTouches:function(e){if(e.targetTouches.length<2)return 1;var t=e.targetTouches[0].pageX,i=e.targetTouches[0].pageY,s=e.targetTouches[1].pageX,a=e.targetTouches[1].pageY;return Math.sqrt(Math.pow(s-t,2)+Math.pow(a-i,2))},onGestureStart:function(e){var t=this.params.zoom,i=this.zoom,a=i.gesture;if(i.fakeGestureTouched=!1,i.fakeGestureMoved=!1,!h.gestures){if(\"touchstart\"!==e.type||\"touchstart\"===e.type&&e.targetTouches.length<2)return;i.fakeGestureTouched=!0,a.scaleStart=K.getDistanceBetweenTouches(e)}a.$slideEl&&a.$slideEl.length||(a.$slideEl=s(e.target).closest(\".swiper-slide\"),0===a.$slideEl.length&&(a.$slideEl=this.slides.eq(this.activeIndex)),a.$imageEl=a.$slideEl.find(\"img, svg, canvas\"),a.$imageWrapEl=a.$imageEl.parent(\".\"+t.containerClass),a.maxRatio=a.$imageWrapEl.attr(\"data-swiper-zoom\")||t.maxRatio,0!==a.$imageWrapEl.length)?(a.$imageEl.transition(0),this.zoom.isScaling=!0):a.$imageEl=void 0},onGestureChange:function(e){var t=this.params.zoom,i=this.zoom,s=i.gesture;if(!h.gestures){if(\"touchmove\"!==e.type||\"touchmove\"===e.type&&e.targetTouches.length<2)return;i.fakeGestureMoved=!0,s.scaleMove=K.getDistanceBetweenTouches(e)}s.$imageEl&&0!==s.$imageEl.length&&(h.gestures?this.zoom.scale=e.scale*i.currentScale:i.scale=s.scaleMove/s.scaleStart*i.currentScale,i.scale>s.maxRatio&&(i.scale=s.maxRatio-1+Math.pow(i.scale-s.maxRatio+1,.5)),i.scale<t.minRatio&&(i.scale=t.minRatio+1-Math.pow(t.minRatio-i.scale+1,.5)),s.$imageEl.transform(\"translate3d(0,0,0) scale(\"+i.scale+\")\"))},onGestureEnd:function(e){var t=this.params.zoom,i=this.zoom,s=i.gesture;if(!h.gestures){if(!i.fakeGestureTouched||!i.fakeGestureMoved)return;if(\"touchend\"!==e.type||\"touchend\"===e.type&&e.changedTouches.length<2&&!y.android)return;i.fakeGestureTouched=!1,i.fakeGestureMoved=!1}s.$imageEl&&0!==s.$imageEl.length&&(i.scale=Math.max(Math.min(i.scale,s.maxRatio),t.minRatio),s.$imageEl.transition(this.params.speed).transform(\"translate3d(0,0,0) scale(\"+i.scale+\")\"),i.currentScale=i.scale,i.isScaling=!1,1===i.scale&&(s.$slideEl=void 0))},onTouchStart:function(e){var t=this.zoom,i=t.gesture,s=t.image;i.$imageEl&&0!==i.$imageEl.length&&(s.isTouched||(y.android&&e.preventDefault(),s.isTouched=!0,s.touchesStart.x=\"touchstart\"===e.type?e.targetTouches[0].pageX:e.pageX,s.touchesStart.y=\"touchstart\"===e.type?e.targetTouches[0].pageY:e.pageY))},onTouchMove:function(e){var t=this.zoom,i=t.gesture,s=t.image,a=t.velocity;if(i.$imageEl&&0!==i.$imageEl.length&&(this.allowClick=!1,s.isTouched&&i.$slideEl)){s.isMoved||(s.width=i.$imageEl[0].offsetWidth,s.height=i.$imageEl[0].offsetHeight,s.startX=d.getTranslate(i.$imageWrapEl[0],\"x\")||0,s.startY=d.getTranslate(i.$imageWrapEl[0],\"y\")||0,i.slideWidth=i.$slideEl[0].offsetWidth,i.slideHeight=i.$slideEl[0].offsetHeight,i.$imageWrapEl.transition(0),this.rtl&&(s.startX=-s.startX),this.rtl&&(s.startY=-s.startY));var r=s.width*t.scale,n=s.height*t.scale;if(!(r<i.slideWidth&&n<i.slideHeight)){if(s.minX=Math.min(i.slideWidth/2-r/2,0),s.maxX=-s.minX,s.minY=Math.min(i.slideHeight/2-n/2,0),s.maxY=-s.minY,s.touchesCurrent.x=\"touchmove\"===e.type?e.targetTouches[0].pageX:e.pageX,s.touchesCurrent.y=\"touchmove\"===e.type?e.targetTouches[0].pageY:e.pageY,!s.isMoved&&!t.isScaling){if(this.isHorizontal()&&(Math.floor(s.minX)===Math.floor(s.startX)&&s.touchesCurrent.x<s.touchesStart.x||Math.floor(s.maxX)===Math.floor(s.startX)&&s.touchesCurrent.x>s.touchesStart.x))return void(s.isTouched=!1);if(!this.isHorizontal()&&(Math.floor(s.minY)===Math.floor(s.startY)&&s.touchesCurrent.y<s.touchesStart.y||Math.floor(s.maxY)===Math.floor(s.startY)&&s.touchesCurrent.y>s.touchesStart.y))return void(s.isTouched=!1)}e.preventDefault(),e.stopPropagation(),s.isMoved=!0,s.currentX=s.touchesCurrent.x-s.touchesStart.x+s.startX,s.currentY=s.touchesCurrent.y-s.touchesStart.y+s.startY,s.currentX<s.minX&&(s.currentX=s.minX+1-Math.pow(s.minX-s.currentX+1,.8)),s.currentX>s.maxX&&(s.currentX=s.maxX-1+Math.pow(s.currentX-s.maxX+1,.8)),s.currentY<s.minY&&(s.currentY=s.minY+1-Math.pow(s.minY-s.currentY+1,.8)),s.currentY>s.maxY&&(s.currentY=s.maxY-1+Math.pow(s.currentY-s.maxY+1,.8)),a.prevPositionX||(a.prevPositionX=s.touchesCurrent.x),a.prevPositionY||(a.prevPositionY=s.touchesCurrent.y),a.prevTime||(a.prevTime=Date.now()),a.x=(s.touchesCurrent.x-a.prevPositionX)/(Date.now()-a.prevTime)/2,a.y=(s.touchesCurrent.y-a.prevPositionY)/(Date.now()-a.prevTime)/2,Math.abs(s.touchesCurrent.x-a.prevPositionX)<2&&(a.x=0),Math.abs(s.touchesCurrent.y-a.prevPositionY)<2&&(a.y=0),a.prevPositionX=s.touchesCurrent.x,a.prevPositionY=s.touchesCurrent.y,a.prevTime=Date.now(),i.$imageWrapEl.transform(\"translate3d(\"+s.currentX+\"px, \"+s.currentY+\"px,0)\")}}},onTouchEnd:function(){var e=this.zoom,t=e.gesture,i=e.image,s=e.velocity;if(t.$imageEl&&0!==t.$imageEl.length){if(!i.isTouched||!i.isMoved)return i.isTouched=!1,void(i.isMoved=!1);i.isTouched=!1,i.isMoved=!1;var a=300,r=300,n=s.x*a,o=i.currentX+n,l=s.y*r,d=i.currentY+l;0!==s.x&&(a=Math.abs((o-i.currentX)/s.x)),0!==s.y&&(r=Math.abs((d-i.currentY)/s.y));var h=Math.max(a,r);i.currentX=o,i.currentY=d;var p=i.width*e.scale,c=i.height*e.scale;i.minX=Math.min(t.slideWidth/2-p/2,0),i.maxX=-i.minX,i.minY=Math.min(t.slideHeight/2-c/2,0),i.maxY=-i.minY,i.currentX=Math.max(Math.min(i.currentX,i.maxX),i.minX),i.currentY=Math.max(Math.min(i.currentY,i.maxY),i.minY),t.$imageWrapEl.transition(h).transform(\"translate3d(\"+i.currentX+\"px, \"+i.currentY+\"px,0)\")}},onTransitionEnd:function(){var e=this.zoom,t=e.gesture;t.$slideEl&&this.previousIndex!==this.activeIndex&&(t.$imageEl.transform(\"translate3d(0,0,0) scale(1)\"),t.$imageWrapEl.transform(\"translate3d(0,0,0)\"),t.$slideEl=void 0,t.$imageEl=void 0,t.$imageWrapEl=void 0,e.scale=1,e.currentScale=1)},toggle:function(e){var t=this.zoom;t.scale&&1!==t.scale?t.out():t.in(e)},in:function(e){var t,i,a,r,n,o,l,d,h,p,c,u,v,f,m,g,b=this.zoom,w=this.params.zoom,y=b.gesture,x=b.image;(y.$slideEl||(y.$slideEl=this.clickedSlide?s(this.clickedSlide):this.slides.eq(this.activeIndex),y.$imageEl=y.$slideEl.find(\"img, svg, canvas\"),y.$imageWrapEl=y.$imageEl.parent(\".\"+w.containerClass)),y.$imageEl&&0!==y.$imageEl.length)&&(y.$slideEl.addClass(\"\"+w.zoomedSlideClass),void 0===x.touchesStart.x&&e?(t=\"touchend\"===e.type?e.changedTouches[0].pageX:e.pageX,i=\"touchend\"===e.type?e.changedTouches[0].pageY:e.pageY):(t=x.touchesStart.x,i=x.touchesStart.y),b.scale=y.$imageWrapEl.attr(\"data-swiper-zoom\")||w.maxRatio,b.currentScale=y.$imageWrapEl.attr(\"data-swiper-zoom\")||w.maxRatio,e?(m=y.$slideEl[0].offsetWidth,g=y.$slideEl[0].offsetHeight,a=y.$slideEl.offset().left+m/2-t,r=y.$slideEl.offset().top+g/2-i,l=y.$imageEl[0].offsetWidth,d=y.$imageEl[0].offsetHeight,h=l*b.scale,p=d*b.scale,v=-(c=Math.min(m/2-h/2,0)),f=-(u=Math.min(g/2-p/2,0)),n=a*b.scale,o=r*b.scale,n<c&&(n=c),n>v&&(n=v),o<u&&(o=u),o>f&&(o=f)):(n=0,o=0),y.$imageWrapEl.transition(300).transform(\"translate3d(\"+n+\"px, \"+o+\"px,0)\"),y.$imageEl.transition(300).transform(\"translate3d(0,0,0) scale(\"+b.scale+\")\"))},out:function(){var e=this.zoom,t=this.params.zoom,i=e.gesture;i.$slideEl||(i.$slideEl=this.clickedSlide?s(this.clickedSlide):this.slides.eq(this.activeIndex),i.$imageEl=i.$slideEl.find(\"img, svg, canvas\"),i.$imageWrapEl=i.$imageEl.parent(\".\"+t.containerClass)),i.$imageEl&&0!==i.$imageEl.length&&(e.scale=1,e.currentScale=1,i.$imageWrapEl.transition(300).transform(\"translate3d(0,0,0)\"),i.$imageEl.transition(300).transform(\"translate3d(0,0,0) scale(1)\"),i.$slideEl.removeClass(\"\"+t.zoomedSlideClass),i.$slideEl=void 0)},enable:function(){var e=this.zoom;if(!e.enabled){e.enabled=!0;var t=!(\"touchstart\"!==this.touchEvents.start||!h.passiveListener||!this.params.passiveListeners)&&{passive:!0,capture:!1};h.gestures?(this.$wrapperEl.on(\"gesturestart\",\".swiper-slide\",e.onGestureStart,t),this.$wrapperEl.on(\"gesturechange\",\".swiper-slide\",e.onGestureChange,t),this.$wrapperEl.on(\"gestureend\",\".swiper-slide\",e.onGestureEnd,t)):\"touchstart\"===this.touchEvents.start&&(this.$wrapperEl.on(this.touchEvents.start,\".swiper-slide\",e.onGestureStart,t),this.$wrapperEl.on(this.touchEvents.move,\".swiper-slide\",e.onGestureChange,t),this.$wrapperEl.on(this.touchEvents.end,\".swiper-slide\",e.onGestureEnd,t)),this.$wrapperEl.on(this.touchEvents.move,\".\"+this.params.zoom.containerClass,e.onTouchMove)}},disable:function(){var e=this.zoom;if(e.enabled){this.zoom.enabled=!1;var t=!(\"touchstart\"!==this.touchEvents.start||!h.passiveListener||!this.params.passiveListeners)&&{passive:!0,capture:!1};h.gestures?(this.$wrapperEl.off(\"gesturestart\",\".swiper-slide\",e.onGestureStart,t),this.$wrapperEl.off(\"gesturechange\",\".swiper-slide\",e.onGestureChange,t),this.$wrapperEl.off(\"gestureend\",\".swiper-slide\",e.onGestureEnd,t)):\"touchstart\"===this.touchEvents.start&&(this.$wrapperEl.off(this.touchEvents.start,\".swiper-slide\",e.onGestureStart,t),this.$wrapperEl.off(this.touchEvents.move,\".swiper-slide\",e.onGestureChange,t),this.$wrapperEl.off(this.touchEvents.end,\".swiper-slide\",e.onGestureEnd,t)),this.$wrapperEl.off(this.touchEvents.move,\".\"+this.params.zoom.containerClass,e.onTouchMove)}}},U={loadInSlide:function(e,t){void 0===t&&(t=!0);var i=this,a=i.params.lazy;if(void 0!==e&&0!==i.slides.length){var r=i.virtual&&i.params.virtual.enabled?i.$wrapperEl.children(\".\"+i.params.slideClass+'[data-swiper-slide-index=\"'+e+'\"]'):i.slides.eq(e),n=r.find(\".\"+a.elementClass+\":not(.\"+a.loadedClass+\"):not(.\"+a.loadingClass+\")\");!r.hasClass(a.elementClass)||r.hasClass(a.loadedClass)||r.hasClass(a.loadingClass)||(n=n.add(r[0])),0!==n.length&&n.each(function(e,n){var o=s(n);o.addClass(a.loadingClass);var l=o.attr(\"data-background\"),d=o.attr(\"data-src\"),h=o.attr(\"data-srcset\"),p=o.attr(\"data-sizes\");i.loadImage(o[0],d||l,h,p,!1,function(){if(void 0!==i&&null!==i&&i&&(!i||i.params)&&!i.destroyed){if(l?(o.css(\"background-image\",'url(\"'+l+'\")'),o.removeAttr(\"data-background\")):(h&&(o.attr(\"srcset\",h),o.removeAttr(\"data-srcset\")),p&&(o.attr(\"sizes\",p),o.removeAttr(\"data-sizes\")),d&&(o.attr(\"src\",d),o.removeAttr(\"data-src\"))),o.addClass(a.loadedClass).removeClass(a.loadingClass),r.find(\".\"+a.preloaderClass).remove(),i.params.loop&&t){var e=r.attr(\"data-swiper-slide-index\");if(r.hasClass(i.params.slideDuplicateClass)){var s=i.$wrapperEl.children('[data-swiper-slide-index=\"'+e+'\"]:not(.'+i.params.slideDuplicateClass+\")\");i.lazy.loadInSlide(s.index(),!1)}else{var n=i.$wrapperEl.children(\".\"+i.params.slideDuplicateClass+'[data-swiper-slide-index=\"'+e+'\"]');i.lazy.loadInSlide(n.index(),!1)}}i.emit(\"lazyImageReady\",r[0],o[0])}}),i.emit(\"lazyImageLoad\",r[0],o[0])})}},load:function(){var e=this,t=e.$wrapperEl,i=e.params,a=e.slides,r=e.activeIndex,n=e.virtual&&i.virtual.enabled,o=i.lazy,l=i.slidesPerView;function d(e){if(n){if(t.children(\".\"+i.slideClass+'[data-swiper-slide-index=\"'+e+'\"]').length)return!0}else if(a[e])return!0;return!1}function h(e){return n?s(e).attr(\"data-swiper-slide-index\"):s(e).index()}if(\"auto\"===l&&(l=0),e.lazy.initialImageLoaded||(e.lazy.initialImageLoaded=!0),e.params.watchSlidesVisibility)t.children(\".\"+i.slideVisibleClass).each(function(t,i){var a=n?s(i).attr(\"data-swiper-slide-index\"):s(i).index();e.lazy.loadInSlide(a)});else if(l>1)for(var p=r;p<r+l;p+=1)d(p)&&e.lazy.loadInSlide(p);else e.lazy.loadInSlide(r);if(o.loadPrevNext)if(l>1||o.loadPrevNextAmount&&o.loadPrevNextAmount>1){for(var c=o.loadPrevNextAmount,u=l,v=Math.min(r+u+Math.max(c,u),a.length),f=Math.max(r-Math.max(u,c),0),m=r+l;m<v;m+=1)d(m)&&e.lazy.loadInSlide(m);for(var g=f;g<r;g+=1)d(g)&&e.lazy.loadInSlide(g)}else{var b=t.children(\".\"+i.slideNextClass);b.length>0&&e.lazy.loadInSlide(h(b));var w=t.children(\".\"+i.slidePrevClass);w.length>0&&e.lazy.loadInSlide(h(w))}}},_={LinearSpline:function(e,t){var i,s,a,r,n,o=function(e,t){for(s=-1,i=e.length;i-s>1;)e[a=i+s>>1]<=t?s=a:i=a;return i};return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(n=o(this.x,e),r=n-1,(e-this.x[r])*(this.y[n]-this.y[r])/(this.x[n]-this.x[r])+this.y[r]):0},this},getInterpolateFunction:function(e){this.controller.spline||(this.controller.spline=this.params.loop?new _.LinearSpline(this.slidesGrid,e.slidesGrid):new _.LinearSpline(this.snapGrid,e.snapGrid))},setTranslate:function(e,t){var i,s,a=this,r=a.controller.control;function n(e){var t=e.rtl&&\"horizontal\"===e.params.direction?-a.translate:a.translate;\"slide\"===a.params.controller.by&&(a.controller.getInterpolateFunction(e),s=-a.controller.spline.interpolate(-t)),s&&\"container\"!==a.params.controller.by||(i=(e.maxTranslate()-e.minTranslate())/(a.maxTranslate()-a.minTranslate()),s=(t-a.minTranslate())*i+e.minTranslate()),a.params.controller.inverse&&(s=e.maxTranslate()-s),e.updateProgress(s),e.setTranslate(s,a),e.updateActiveIndex(),e.updateSlidesClasses()}if(Array.isArray(r))for(var o=0;o<r.length;o+=1)r[o]!==t&&r[o]instanceof I&&n(r[o]);else r instanceof I&&t!==r&&n(r)},setTransition:function(e,t){var i,s=this,a=s.controller.control;function r(t){t.setTransition(e,s),0!==e&&(t.transitionStart(),t.$wrapperEl.transitionEnd(function(){a&&(t.params.loop&&\"slide\"===s.params.controller.by&&t.loopFix(),t.transitionEnd())}))}if(Array.isArray(a))for(i=0;i<a.length;i+=1)a[i]!==t&&a[i]instanceof I&&r(a[i]);else a instanceof I&&t!==a&&r(a)}},Z={makeElFocusable:function(e){return e.attr(\"tabIndex\",\"0\"),e},addElRole:function(e,t){return e.attr(\"role\",t),e},addElLabel:function(e,t){return e.attr(\"aria-label\",t),e},disableEl:function(e){return e.attr(\"aria-disabled\",!0),e},enableEl:function(e){return e.attr(\"aria-disabled\",!1),e},onEnterKey:function(e){var t=this.params.a11y;if(13===e.keyCode){var i=s(e.target);this.navigation&&this.navigation.$nextEl&&i.is(this.navigation.$nextEl)&&(this.isEnd&&!this.params.loop||this.slideNext(),this.isEnd?this.a11y.notify(t.lastSlideMessage):this.a11y.notify(t.nextSlideMessage)),this.navigation&&this.navigation.$prevEl&&i.is(this.navigation.$prevEl)&&(this.isBeginning&&!this.params.loop||this.slidePrev(),this.isBeginning?this.a11y.notify(t.firstSlideMessage):this.a11y.notify(t.prevSlideMessage)),this.pagination&&i.is(\".\"+this.params.pagination.bulletClass)&&i[0].click()}},notify:function(e){var t=this.a11y.liveRegion;0!==t.length&&(t.html(\"\"),t.html(e))},updateNavigation:function(){if(!this.params.loop){var e=this.navigation,t=e.$nextEl,i=e.$prevEl;i&&i.length>0&&(this.isBeginning?this.a11y.disableEl(i):this.a11y.enableEl(i)),t&&t.length>0&&(this.isEnd?this.a11y.disableEl(t):this.a11y.enableEl(t))}},updatePagination:function(){var e=this,t=e.params.a11y;e.pagination&&e.params.pagination.clickable&&e.pagination.bullets&&e.pagination.bullets.length&&e.pagination.bullets.each(function(i,a){var r=s(a);e.a11y.makeElFocusable(r),e.a11y.addElRole(r,\"button\"),e.a11y.addElLabel(r,t.paginationBulletMessage.replace(/{{index}}/,r.index()+1))})},init:function(){this.$el.append(this.a11y.liveRegion);var e,t,i=this.params.a11y;this.navigation&&this.navigation.$nextEl&&(e=this.navigation.$nextEl),this.navigation&&this.navigation.$prevEl&&(t=this.navigation.$prevEl),e&&(this.a11y.makeElFocusable(e),this.a11y.addElRole(e,\"button\"),this.a11y.addElLabel(e,i.nextSlideMessage),e.on(\"keydown\",this.a11y.onEnterKey)),t&&(this.a11y.makeElFocusable(t),this.a11y.addElRole(t,\"button\"),this.a11y.addElLabel(t,i.prevSlideMessage),t.on(\"keydown\",this.a11y.onEnterKey)),this.pagination&&this.params.pagination.clickable&&this.pagination.bullets&&this.pagination.bullets.length&&this.pagination.$el.on(\"keydown\",\".\"+this.params.pagination.bulletClass,this.a11y.onEnterKey)},destroy:function(){var e,t;this.a11y.liveRegion&&this.a11y.liveRegion.length>0&&this.a11y.liveRegion.remove(),this.navigation&&this.navigation.$nextEl&&(e=this.navigation.$nextEl),this.navigation&&this.navigation.$prevEl&&(t=this.navigation.$prevEl),e&&e.off(\"keydown\",this.a11y.onEnterKey),t&&t.off(\"keydown\",this.a11y.onEnterKey),this.pagination&&this.params.pagination.clickable&&this.pagination.bullets&&this.pagination.bullets.length&&this.pagination.$el.off(\"keydown\",\".\"+this.params.pagination.bulletClass,this.a11y.onEnterKey)}},Q={init:function(){if(this.params.history){if(!t.history||!t.history.pushState)return this.params.history.enabled=!1,void(this.params.hashNavigation.enabled=!0);var e=this.history;e.initialized=!0,e.paths=Q.getPathValues(),(e.paths.key||e.paths.value)&&(e.scrollToSlide(0,e.paths.value,this.params.runCallbacksOnInit),this.params.history.replaceState||t.addEventListener(\"popstate\",this.history.setHistoryPopState))}},destroy:function(){this.params.history.replaceState||t.removeEventListener(\"popstate\",this.history.setHistoryPopState)},setHistoryPopState:function(){this.history.paths=Q.getPathValues(),this.history.scrollToSlide(this.params.speed,this.history.paths.value,!1)},getPathValues:function(){var e=t.location.pathname.slice(1).split(\"/\").filter(function(e){return\"\"!==e}),i=e.length;return{key:e[i-2],value:e[i-1]}},setHistory:function(e,i){if(this.history.initialized&&this.params.history.enabled){var s=this.slides.eq(i),a=Q.slugify(s.attr(\"data-history\"));t.location.pathname.includes(e)||(a=e+\"/\"+a);var r=t.history.state;r&&r.value===a||(this.params.history.replaceState?t.history.replaceState({value:a},null,a):t.history.pushState({value:a},null,a))}},slugify:function(e){return e.toString().toLowerCase().replace(/\\s+/g,\"-\").replace(/[^\\w-]+/g,\"\").replace(/--+/g,\"-\").replace(/^-+/,\"\").replace(/-+$/,\"\")},scrollToSlide:function(e,t,i){if(t)for(var s=0,a=this.slides.length;s<a;s+=1){var r=this.slides.eq(s);if(Q.slugify(r.attr(\"data-history\"))===t&&!r.hasClass(this.params.slideDuplicateClass)){var n=r.index();this.slideTo(n,e,i)}}else this.slideTo(0,e,i)}},J={onHashCange:function(){var t=e.location.hash.replace(\"#\",\"\");t!==this.slides.eq(this.activeIndex).attr(\"data-hash\")&&this.slideTo(this.$wrapperEl.children(\".\"+this.params.slideClass+'[data-hash=\"'+t+'\"]').index())},setHash:function(){if(this.hashNavigation.initialized&&this.params.hashNavigation.enabled)if(this.params.hashNavigation.replaceState&&t.history&&t.history.replaceState)t.history.replaceState(null,null,\"#\"+this.slides.eq(this.activeIndex).attr(\"data-hash\")||\"\");else{var i=this.slides.eq(this.activeIndex),s=i.attr(\"data-hash\")||i.attr(\"data-history\");e.location.hash=s||\"\"}},init:function(){if(!(!this.params.hashNavigation.enabled||this.params.history&&this.params.history.enabled)){this.hashNavigation.initialized=!0;var i=e.location.hash.replace(\"#\",\"\");if(i)for(var a=0,r=this.slides.length;a<r;a+=1){var n=this.slides.eq(a);if((n.attr(\"data-hash\")||n.attr(\"data-history\"))===i&&!n.hasClass(this.params.slideDuplicateClass)){var o=n.index();this.slideTo(o,0,this.params.runCallbacksOnInit,!0)}}this.params.hashNavigation.watchState&&s(t).on(\"hashchange\",this.hashNavigation.onHashCange)}},destroy:function(){this.params.hashNavigation.watchState&&s(t).off(\"hashchange\",this.hashNavigation.onHashCange)}},ee={run:function(){var e=this,t=e.slides.eq(e.activeIndex),i=e.params.autoplay.delay;t.attr(\"data-swiper-autoplay\")&&(i=t.attr(\"data-swiper-autoplay\")||e.params.autoplay.delay),e.autoplay.timeout=d.nextTick(function(){e.params.autoplay.reverseDirection?e.params.loop?(e.loopFix(),e.slidePrev(e.params.speed,!0,!0),e.emit(\"autoplay\")):e.isBeginning?e.params.autoplay.stopOnLastSlide?e.autoplay.stop():(e.slideTo(e.slides.length-1,e.params.speed,!0,!0),e.emit(\"autoplay\")):(e.slidePrev(e.params.speed,!0,!0),e.emit(\"autoplay\")):e.params.loop?(e.loopFix(),e.slideNext(e.params.speed,!0,!0),e.emit(\"autoplay\")):e.isEnd?e.params.autoplay.stopOnLastSlide?e.autoplay.stop():(e.slideTo(0,e.params.speed,!0,!0),e.emit(\"autoplay\")):(e.slideNext(e.params.speed,!0,!0),e.emit(\"autoplay\"))},i)},start:function(){return void 0===this.autoplay.timeout&&(!this.autoplay.running&&(this.autoplay.running=!0,this.emit(\"autoplayStart\"),this.autoplay.run(),!0))},stop:function(){return!!this.autoplay.running&&(void 0!==this.autoplay.timeout&&(this.autoplay.timeout&&(clearTimeout(this.autoplay.timeout),this.autoplay.timeout=void 0),this.autoplay.running=!1,this.emit(\"autoplayStop\"),!0))},pause:function(e){var t=this;t.autoplay.running&&(t.autoplay.paused||(t.autoplay.timeout&&clearTimeout(t.autoplay.timeout),t.autoplay.paused=!0,0!==e&&t.params.autoplay.waitForTransition?t.$wrapperEl.transitionEnd(function(){t&&!t.destroyed&&(t.autoplay.paused=!1,t.autoplay.running?t.autoplay.run():t.autoplay.stop())}):(t.autoplay.paused=!1,t.autoplay.run())))}},te={setTranslate:function(){for(var e=this.slides,t=0;t<e.length;t+=1){var i=this.slides.eq(t),s=-i[0].swiperSlideOffset;this.params.virtualTranslate||(s-=this.translate);var a=0;this.isHorizontal()||(a=s,s=0);var r=this.params.fadeEffect.crossFade?Math.max(1-Math.abs(i[0].progress),0):1+Math.min(Math.max(i[0].progress,-1),0);i.css({opacity:r}).transform(\"translate3d(\"+s+\"px, \"+a+\"px, 0px)\")}},setTransition:function(e){var t=this,i=t.slides,s=t.$wrapperEl;if(i.transition(e),t.params.virtualTranslate&&0!==e){var a=!1;i.transitionEnd(function(){if(!a&&t&&!t.destroyed){a=!0,t.animating=!1;for(var e=[\"webkitTransitionEnd\",\"transitionend\"],i=0;i<e.length;i+=1)s.trigger(e[i])}})}}},ie={setTranslate:function(){var e,t=this.$el,i=this.$wrapperEl,a=this.slides,r=this.width,n=this.height,o=this.rtl,l=this.size,d=this.params.cubeEffect,h=this.isHorizontal(),p=this.virtual&&this.params.virtual.enabled,c=0;d.shadow&&(h?(0===(e=i.find(\".swiper-cube-shadow\")).length&&(e=s('<div class=\"swiper-cube-shadow\"></div>'),i.append(e)),e.css({height:r+\"px\"})):0===(e=t.find(\".swiper-cube-shadow\")).length&&(e=s('<div class=\"swiper-cube-shadow\"></div>'),t.append(e)));for(var u=0;u<a.length;u+=1){var v=a.eq(u),f=u;p&&(f=parseInt(v.attr(\"data-swiper-slide-index\"),10));var m=90*f,g=Math.floor(m/360);o&&(m=-m,g=Math.floor(-m/360));var b=Math.max(Math.min(v[0].progress,1),-1),w=0,y=0,x=0;f%4==0?(w=4*-g*l,x=0):(f-1)%4==0?(w=0,x=4*-g*l):(f-2)%4==0?(w=l+4*g*l,x=l):(f-3)%4==0&&(w=-l,x=3*l+4*l*g),o&&(w=-w),h||(y=w,w=0);var E=\"rotateX(\"+(h?0:-m)+\"deg) rotateY(\"+(h?m:0)+\"deg) translate3d(\"+w+\"px, \"+y+\"px, \"+x+\"px)\";if(b<=1&&b>-1&&(c=90*f+90*b,o&&(c=90*-f-90*b)),v.transform(E),d.slideShadows){var T=h?v.find(\".swiper-slide-shadow-left\"):v.find(\".swiper-slide-shadow-top\"),S=h?v.find(\".swiper-slide-shadow-right\"):v.find(\".swiper-slide-shadow-bottom\");0===T.length&&(T=s('<div class=\"swiper-slide-shadow-'+(h?\"left\":\"top\")+'\"></div>'),v.append(T)),0===S.length&&(S=s('<div class=\"swiper-slide-shadow-'+(h?\"right\":\"bottom\")+'\"></div>'),v.append(S)),T.length&&(T[0].style.opacity=Math.max(-b,0)),S.length&&(S[0].style.opacity=Math.max(b,0))}}if(i.css({\"-webkit-transform-origin\":\"50% 50% -\"+l/2+\"px\",\"-moz-transform-origin\":\"50% 50% -\"+l/2+\"px\",\"-ms-transform-origin\":\"50% 50% -\"+l/2+\"px\",\"transform-origin\":\"50% 50% -\"+l/2+\"px\"}),d.shadow)if(h)e.transform(\"translate3d(0px, \"+(r/2+d.shadowOffset)+\"px, \"+-r/2+\"px) rotateX(90deg) rotateZ(0deg) scale(\"+d.shadowScale+\")\");else{var C=Math.abs(c)-90*Math.floor(Math.abs(c)/90),M=1.5-(Math.sin(2*C*Math.PI/360)/2+Math.cos(2*C*Math.PI/360)/2),z=d.shadowScale,k=d.shadowScale/M,$=d.shadowOffset;e.transform(\"scale3d(\"+z+\", 1, \"+k+\") translate3d(0px, \"+(n/2+$)+\"px, \"+-n/2/k+\"px) rotateX(-90deg)\")}var L=P.isSafari||P.isUiWebView?-l/2:0;i.transform(\"translate3d(0px,0,\"+L+\"px) rotateX(\"+(this.isHorizontal()?0:c)+\"deg) rotateY(\"+(this.isHorizontal()?-c:0)+\"deg)\")},setTransition:function(e){var t=this.$el;this.slides.transition(e).find(\".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left\").transition(e),this.params.cubeEffect.shadow&&!this.isHorizontal()&&t.find(\".swiper-cube-shadow\").transition(e)}},se={setTranslate:function(){for(var e=this.slides,t=0;t<e.length;t+=1){var i=e.eq(t),a=i[0].progress;this.params.flipEffect.limitRotation&&(a=Math.max(Math.min(i[0].progress,1),-1));var r=-180*a,n=0,o=-i[0].swiperSlideOffset,l=0;if(this.isHorizontal()?this.rtl&&(r=-r):(l=o,o=0,n=-r,r=0),i[0].style.zIndex=-Math.abs(Math.round(a))+e.length,this.params.flipEffect.slideShadows){var d=this.isHorizontal()?i.find(\".swiper-slide-shadow-left\"):i.find(\".swiper-slide-shadow-top\"),h=this.isHorizontal()?i.find(\".swiper-slide-shadow-right\"):i.find(\".swiper-slide-shadow-bottom\");0===d.length&&(d=s('<div class=\"swiper-slide-shadow-'+(this.isHorizontal()?\"left\":\"top\")+'\"></div>'),i.append(d)),0===h.length&&(h=s('<div class=\"swiper-slide-shadow-'+(this.isHorizontal()?\"right\":\"bottom\")+'\"></div>'),i.append(h)),d.length&&(d[0].style.opacity=Math.max(-a,0)),h.length&&(h[0].style.opacity=Math.max(a,0))}i.transform(\"translate3d(\"+o+\"px, \"+l+\"px, 0px) rotateX(\"+n+\"deg) rotateY(\"+r+\"deg)\")}},setTransition:function(e){var t=this,i=t.slides,s=t.activeIndex,a=t.$wrapperEl;if(i.transition(e).find(\".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left\").transition(e),t.params.virtualTranslate&&0!==e){var r=!1;i.eq(s).transitionEnd(function(){if(!r&&t&&!t.destroyed){r=!0,t.animating=!1;for(var e=[\"webkitTransitionEnd\",\"transitionend\"],i=0;i<e.length;i+=1)a.trigger(e[i])}})}}},ae={setTranslate:function(){for(var e=this.width,t=this.height,i=this.slides,a=this.$wrapperEl,r=this.slidesSizesGrid,n=this.params.coverflowEffect,o=this.isHorizontal(),l=this.translate,d=o?e/2-l:t/2-l,p=o?n.rotate:-n.rotate,c=n.depth,u=0,v=i.length;u<v;u+=1){var f=i.eq(u),m=r[u],g=(d-f[0].swiperSlideOffset-m/2)/m*n.modifier,b=o?p*g:0,w=o?0:p*g,y=-c*Math.abs(g),x=o?0:n.stretch*g,E=o?n.stretch*g:0;Math.abs(E)<.001&&(E=0),Math.abs(x)<.001&&(x=0),Math.abs(y)<.001&&(y=0),Math.abs(b)<.001&&(b=0),Math.abs(w)<.001&&(w=0);var T=\"translate3d(\"+E+\"px,\"+x+\"px,\"+y+\"px) rotateX(\"+w+\"deg) rotateY(\"+b+\"deg)\";if(f.transform(T),f[0].style.zIndex=1-Math.abs(Math.round(g)),n.slideShadows){var S=o?f.find(\".swiper-slide-shadow-left\"):f.find(\".swiper-slide-shadow-top\"),C=o?f.find(\".swiper-slide-shadow-right\"):f.find(\".swiper-slide-shadow-bottom\");0===S.length&&(S=s('<div class=\"swiper-slide-shadow-'+(o?\"left\":\"top\")+'\"></div>'),f.append(S)),0===C.length&&(C=s('<div class=\"swiper-slide-shadow-'+(o?\"right\":\"bottom\")+'\"></div>'),f.append(C)),S.length&&(S[0].style.opacity=g>0?g:0),C.length&&(C[0].style.opacity=-g>0?-g:0)}}(h.pointerEvents||h.prefixedPointerEvents)&&(a[0].style.perspectiveOrigin=d+\"px 50%\")},setTransition:function(e){this.slides.transition(e).find(\".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left\").transition(e)}},re=[D,O,A,H,X,B,V,{name:\"mousewheel\",params:{mousewheel:{enabled:!1,releaseOnEdges:!1,invert:!1,forceToAxis:!1,sensitivity:1,eventsTarged:\"container\"}},create:function(){d.extend(this,{mousewheel:{enabled:!1,enable:R.enable.bind(this),disable:R.disable.bind(this),handle:R.handle.bind(this),lastScrollTime:d.now()}})},on:{init:function(){this.params.mousewheel.enabled&&this.mousewheel.enable()},destroy:function(){this.mousewheel.enabled&&this.mousewheel.disable()}}},{name:\"navigation\",params:{navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:\"swiper-button-disabled\",hiddenClass:\"swiper-button-hidden\",lockClass:\"swiper-button-lock\"}},create:function(){d.extend(this,{navigation:{init:F.init.bind(this),update:F.update.bind(this),destroy:F.destroy.bind(this)}})},on:{init:function(){this.navigation.init(),this.navigation.update()},toEdge:function(){this.navigation.update()},fromEdge:function(){this.navigation.update()},destroy:function(){this.navigation.destroy()},click:function(e){var t=this.navigation,i=t.$nextEl,a=t.$prevEl;!this.params.navigation.hideOnClick||s(e.target).is(a)||s(e.target).is(i)||(i&&i.toggleClass(this.params.navigation.hiddenClass),a&&a.toggleClass(this.params.navigation.hiddenClass))}}},{name:\"pagination\",params:{pagination:{el:null,bulletElement:\"span\",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,type:\"bullets\",dynamicBullets:!1,dynamicMainBullets:1,bulletClass:\"swiper-pagination-bullet\",bulletActiveClass:\"swiper-pagination-bullet-active\",modifierClass:\"swiper-pagination-\",currentClass:\"swiper-pagination-current\",totalClass:\"swiper-pagination-total\",hiddenClass:\"swiper-pagination-hidden\",progressbarFillClass:\"swiper-pagination-progressbar-fill\",clickableClass:\"swiper-pagination-clickable\",lockClass:\"swiper-pagination-lock\"}},create:function(){d.extend(this,{pagination:{init:W.init.bind(this),render:W.render.bind(this),update:W.update.bind(this),destroy:W.destroy.bind(this),dynamicBulletIndex:0}})},on:{init:function(){this.pagination.init(),this.pagination.render(),this.pagination.update()},activeIndexChange:function(){this.params.loop?this.pagination.update():void 0===this.snapIndex&&this.pagination.update()},snapIndexChange:function(){this.params.loop||this.pagination.update()},slidesLengthChange:function(){this.params.loop&&(this.pagination.render(),this.pagination.update())},snapGridLengthChange:function(){this.params.loop||(this.pagination.render(),this.pagination.update())},destroy:function(){this.pagination.destroy()},click:function(e){this.params.pagination.el&&this.params.pagination.hideOnClick&&this.pagination.$el.length>0&&!s(e.target).hasClass(this.params.pagination.bulletClass)&&this.pagination.$el.toggleClass(this.params.pagination.hiddenClass)}}},{name:\"scrollbar\",params:{scrollbar:{el:null,dragSize:\"auto\",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:\"swiper-scrollbar-lock\",dragClass:\"swiper-scrollbar-drag\"}},create:function(){d.extend(this,{scrollbar:{init:q.init.bind(this),destroy:q.destroy.bind(this),updateSize:q.updateSize.bind(this),setTranslate:q.setTranslate.bind(this),setTransition:q.setTransition.bind(this),enableDraggable:q.enableDraggable.bind(this),disableDraggable:q.disableDraggable.bind(this),setDragPosition:q.setDragPosition.bind(this),onDragStart:q.onDragStart.bind(this),onDragMove:q.onDragMove.bind(this),onDragEnd:q.onDragEnd.bind(this),isTouched:!1,timeout:null,dragTimeout:null}})},on:{init:function(){this.scrollbar.init(),this.scrollbar.updateSize(),this.scrollbar.setTranslate()},update:function(){this.scrollbar.updateSize()},resize:function(){this.scrollbar.updateSize()},observerUpdate:function(){this.scrollbar.updateSize()},setTranslate:function(){this.scrollbar.setTranslate()},setTransition:function(e){this.scrollbar.setTransition(e)},destroy:function(){this.scrollbar.destroy()}}},{name:\"parallax\",params:{parallax:{enabled:!1}},create:function(){d.extend(this,{parallax:{setTransform:j.setTransform.bind(this),setTranslate:j.setTranslate.bind(this),setTransition:j.setTransition.bind(this)}})},on:{beforeInit:function(){this.params.parallax.enabled&&(this.params.watchSlidesProgress=!0)},init:function(){this.params.parallax&&this.parallax.setTranslate()},setTranslate:function(){this.params.parallax&&this.parallax.setTranslate()},setTransition:function(e){this.params.parallax&&this.parallax.setTransition(e)}}},{name:\"zoom\",params:{zoom:{enabled:!1,maxRatio:3,minRatio:1,toggle:!0,containerClass:\"swiper-zoom-container\",zoomedSlideClass:\"swiper-slide-zoomed\"}},create:function(){var e=this,t={enabled:!1,scale:1,currentScale:1,isScaling:!1,gesture:{$slideEl:void 0,slideWidth:void 0,slideHeight:void 0,$imageEl:void 0,$imageWrapEl:void 0,maxRatio:3},image:{isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},velocity:{x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0}};\"onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out\".split(\" \").forEach(function(i){t[i]=K[i].bind(e)}),d.extend(e,{zoom:t})},on:{init:function(){this.params.zoom.enabled&&this.zoom.enable()},destroy:function(){this.zoom.disable()},touchStart:function(e){this.zoom.enabled&&this.zoom.onTouchStart(e)},touchEnd:function(e){this.zoom.enabled&&this.zoom.onTouchEnd(e)},doubleTap:function(e){this.params.zoom.enabled&&this.zoom.enabled&&this.params.zoom.toggle&&this.zoom.toggle(e)},transitionEnd:function(){this.zoom.enabled&&this.params.zoom.enabled&&this.zoom.onTransitionEnd()}}},{name:\"lazy\",params:{lazy:{enabled:!1,loadPrevNext:!1,loadPrevNextAmount:1,loadOnTransitionStart:!1,elementClass:\"swiper-lazy\",loadingClass:\"swiper-lazy-loading\",loadedClass:\"swiper-lazy-loaded\",preloaderClass:\"swiper-lazy-preloader\"}},create:function(){d.extend(this,{lazy:{initialImageLoaded:!1,load:U.load.bind(this),loadInSlide:U.loadInSlide.bind(this)}})},on:{beforeInit:function(){this.params.lazy.enabled&&this.params.preloadImages&&(this.params.preloadImages=!1)},init:function(){this.params.lazy.enabled&&!this.params.loop&&0===this.params.initialSlide&&this.lazy.load()},scroll:function(){this.params.freeMode&&!this.params.freeModeSticky&&this.lazy.load()},resize:function(){this.params.lazy.enabled&&this.lazy.load()},scrollbarDragMove:function(){this.params.lazy.enabled&&this.lazy.load()},transitionStart:function(){this.params.lazy.enabled&&(this.params.lazy.loadOnTransitionStart||!this.params.lazy.loadOnTransitionStart&&!this.lazy.initialImageLoaded)&&this.lazy.load()},transitionEnd:function(){this.params.lazy.enabled&&!this.params.lazy.loadOnTransitionStart&&this.lazy.load()}}},{name:\"controller\",params:{controller:{control:void 0,inverse:!1,by:\"slide\"}},create:function(){d.extend(this,{controller:{control:this.params.controller.control,getInterpolateFunction:_.getInterpolateFunction.bind(this),setTranslate:_.setTranslate.bind(this),setTransition:_.setTransition.bind(this)}})},on:{update:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},resize:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},observerUpdate:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},setTranslate:function(e,t){this.controller.control&&this.controller.setTranslate(e,t)},setTransition:function(e,t){this.controller.control&&this.controller.setTransition(e,t)}}},{name:\"a11y\",params:{a11y:{enabled:!1,notificationClass:\"swiper-notification\",prevSlideMessage:\"Previous slide\",nextSlideMessage:\"Next slide\",firstSlideMessage:\"This is the first slide\",lastSlideMessage:\"This is the last slide\",paginationBulletMessage:\"Go to slide {{index}}\"}},create:function(){var e=this;d.extend(e,{a11y:{liveRegion:s('<span class=\"'+e.params.a11y.notificationClass+'\" aria-live=\"assertive\" aria-atomic=\"true\"></span>')}}),Object.keys(Z).forEach(function(t){e.a11y[t]=Z[t].bind(e)})},on:{init:function(){this.params.a11y.enabled&&(this.a11y.init(),this.a11y.updateNavigation())},toEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},fromEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},paginationUpdate:function(){this.params.a11y.enabled&&this.a11y.updatePagination()},destroy:function(){this.params.a11y.enabled&&this.a11y.destroy()}}},{name:\"history\",params:{history:{enabled:!1,replaceState:!1,key:\"slides\"}},create:function(){d.extend(this,{history:{init:Q.init.bind(this),setHistory:Q.setHistory.bind(this),setHistoryPopState:Q.setHistoryPopState.bind(this),scrollToSlide:Q.scrollToSlide.bind(this),destroy:Q.destroy.bind(this)}})},on:{init:function(){this.params.history.enabled&&this.history.init()},destroy:function(){this.params.history.enabled&&this.history.destroy()},transitionEnd:function(){this.history.initialized&&this.history.setHistory(this.params.history.key,this.activeIndex)}}},{name:\"hash-navigation\",params:{hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}},create:function(){d.extend(this,{hashNavigation:{initialized:!1,init:J.init.bind(this),destroy:J.destroy.bind(this),setHash:J.setHash.bind(this),onHashCange:J.onHashCange.bind(this)}})},on:{init:function(){this.params.hashNavigation.enabled&&this.hashNavigation.init()},destroy:function(){this.params.hashNavigation.enabled&&this.hashNavigation.destroy()},transitionEnd:function(){this.hashNavigation.initialized&&this.hashNavigation.setHash()}}},{name:\"autoplay\",params:{autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1}},create:function(){d.extend(this,{autoplay:{running:!1,paused:!1,run:ee.run.bind(this),start:ee.start.bind(this),stop:ee.stop.bind(this),pause:ee.pause.bind(this)}})},on:{init:function(){this.params.autoplay.enabled&&this.autoplay.start()},beforeTransitionStart:function(e,t){this.autoplay.running&&(t||!this.params.autoplay.disableOnInteraction?this.autoplay.pause(e):this.autoplay.stop())},sliderFirstMove:function(){this.autoplay.running&&(this.params.autoplay.disableOnInteraction?this.autoplay.stop():this.autoplay.pause())},destroy:function(){this.autoplay.running&&this.autoplay.stop()}}},{name:\"effect-fade\",params:{fadeEffect:{crossFade:!1}},create:function(){d.extend(this,{fadeEffect:{setTranslate:te.setTranslate.bind(this),setTransition:te.setTransition.bind(this)}})},on:{beforeInit:function(){if(\"fade\"===this.params.effect){this.classNames.push(this.params.containerModifierClass+\"fade\");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};d.extend(this.params,e),d.extend(this.originalParams,e)}},setTranslate:function(){\"fade\"===this.params.effect&&this.fadeEffect.setTranslate()},setTransition:function(e){\"fade\"===this.params.effect&&this.fadeEffect.setTransition(e)}}},{name:\"effect-cube\",params:{cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}},create:function(){d.extend(this,{cubeEffect:{setTranslate:ie.setTranslate.bind(this),setTransition:ie.setTransition.bind(this)}})},on:{beforeInit:function(){if(\"cube\"===this.params.effect){this.classNames.push(this.params.containerModifierClass+\"cube\"),this.classNames.push(this.params.containerModifierClass+\"3d\");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0};d.extend(this.params,e),d.extend(this.originalParams,e)}},setTranslate:function(){\"cube\"===this.params.effect&&this.cubeEffect.setTranslate()},setTransition:function(e){\"cube\"===this.params.effect&&this.cubeEffect.setTransition(e)}}},{name:\"effect-flip\",params:{flipEffect:{slideShadows:!0,limitRotation:!0}},create:function(){d.extend(this,{flipEffect:{setTranslate:se.setTranslate.bind(this),setTransition:se.setTransition.bind(this)}})},on:{beforeInit:function(){if(\"flip\"===this.params.effect){this.classNames.push(this.params.containerModifierClass+\"flip\"),this.classNames.push(this.params.containerModifierClass+\"3d\");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};d.extend(this.params,e),d.extend(this.originalParams,e)}},setTranslate:function(){\"flip\"===this.params.effect&&this.flipEffect.setTranslate()},setTransition:function(e){\"flip\"===this.params.effect&&this.flipEffect.setTransition(e)}}},{name:\"effect-coverflow\",params:{coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0}},create:function(){d.extend(this,{coverflowEffect:{setTranslate:ae.setTranslate.bind(this),setTransition:ae.setTransition.bind(this)}})},on:{beforeInit:function(){\"coverflow\"===this.params.effect&&(this.classNames.push(this.params.containerModifierClass+\"coverflow\"),this.classNames.push(this.params.containerModifierClass+\"3d\"),this.params.watchSlidesProgress=!0,this.originalParams.watchSlidesProgress=!0)},setTranslate:function(){\"coverflow\"===this.params.effect&&this.coverflowEffect.setTranslate()},setTransition:function(e){\"coverflow\"===this.params.effect&&this.coverflowEffect.setTransition(e)}}}];return void 0===I.use&&(I.use=I.Class.use,I.installModule=I.Class.installModule),I.use(re),I});\n//# sourceMappingURL=swiper.min.js.map\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\n\n\nvar _Group = function () {\n\tthis._tweens = {};\n\tthis._tweensAddedDuringUpdate = {};\n};\n\n_Group.prototype = {\n\tgetAll: function () {\n\n\t\treturn Object.keys(this._tweens).map(function (tweenId) {\n\t\t\treturn this._tweens[tweenId];\n\t\t}.bind(this));\n\n\t},\n\n\tremoveAll: function () {\n\n\t\tthis._tweens = {};\n\n\t},\n\n\tadd: function (tween) {\n\n\t\tthis._tweens[tween.getId()] = tween;\n\t\tthis._tweensAddedDuringUpdate[tween.getId()] = tween;\n\n\t},\n\n\tremove: function (tween) {\n\n\t\tdelete this._tweens[tween.getId()];\n\t\tdelete this._tweensAddedDuringUpdate[tween.getId()];\n\n\t},\n\n\tupdate: function (time, preserve) {\n\n\t\tvar tweenIds = Object.keys(this._tweens);\n\n\t\tif (tweenIds.length === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttime = time !== undefined ? time : TWEEN.now();\n\n\t\t// Tweens are updated in \"batches\". If you add a new tween during an update, then the\n\t\t// new tween will be updated in the next batch.\n\t\t// If you remove a tween during an update, it may or may not be updated. However,\n\t\t// if the removed tween was added during the current batch, then it will not be updated.\n\t\twhile (tweenIds.length > 0) {\n\t\t\tthis._tweensAddedDuringUpdate = {};\n\n\t\t\tfor (var i = 0; i < tweenIds.length; i++) {\n\n\t\t\t\tvar tween = this._tweens[tweenIds[i]];\n\n\t\t\t\tif (tween && tween.update(time) === false) {\n\t\t\t\t\ttween._isPlaying = false;\n\n\t\t\t\t\tif (!preserve) {\n\t\t\t\t\t\tdelete this._tweens[tweenIds[i]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttweenIds = Object.keys(this._tweensAddedDuringUpdate);\n\t\t}\n\n\t\treturn true;\n\n\t}\n};\n\nvar TWEEN = new _Group();\n\nTWEEN.Group = _Group;\nTWEEN._nextId = 0;\nTWEEN.nextId = function () {\n\treturn TWEEN._nextId++;\n};\n\n\n// Include a performance.now polyfill.\n// In node.js, use process.hrtime.\nif (typeof (window) === 'undefined' && typeof (process) !== 'undefined') {\n\tTWEEN.now = function () {\n\t\tvar time = process.hrtime();\n\n\t\t// Convert [seconds, nanoseconds] to milliseconds.\n\t\treturn time[0] * 1000 + time[1] / 1000000;\n\t};\n}\n// In a browser, use window.performance.now if it is available.\nelse if (typeof (window) !== 'undefined' &&\n window.performance !== undefined &&\n\t\t window.performance.now !== undefined) {\n\t// This must be bound, because directly assigning this function\n\t// leads to an invocation exception in Chrome.\n\tTWEEN.now = window.performance.now.bind(window.performance);\n}\n// Use Date.now if it is available.\nelse if (Date.now !== undefined) {\n\tTWEEN.now = Date.now;\n}\n// Otherwise, use 'new Date().getTime()'.\nelse {\n\tTWEEN.now = function () {\n\t\treturn new Date().getTime();\n\t};\n}\n\n\nTWEEN.Tween = function (object, group) {\n\tthis._object = object;\n\tthis._valuesStart = {};\n\tthis._valuesEnd = {};\n\tthis._valuesStartRepeat = {};\n\tthis._duration = 1000;\n\tthis._repeat = 0;\n\tthis._repeatDelayTime = undefined;\n\tthis._yoyo = false;\n\tthis._isPlaying = false;\n\tthis._reversed = false;\n\tthis._delayTime = 0;\n\tthis._startTime = null;\n\tthis._easingFunction = TWEEN.Easing.Linear.None;\n\tthis._interpolationFunction = TWEEN.Interpolation.Linear;\n\tthis._chainedTweens = [];\n\tthis._onStartCallback = null;\n\tthis._onStartCallbackFired = false;\n\tthis._onUpdateCallback = null;\n\tthis._onCompleteCallback = null;\n\tthis._onStopCallback = null;\n\tthis._group = group || TWEEN;\n\tthis._id = TWEEN.nextId();\n\n};\n\nTWEEN.Tween.prototype = {\n\tgetId: function getId() {\n\t\treturn this._id;\n\t},\n\n\tisPlaying: function isPlaying() {\n\t\treturn this._isPlaying;\n\t},\n\n\tto: function to(properties, duration) {\n\n\t\tthis._valuesEnd = properties;\n\n\t\tif (duration !== undefined) {\n\t\t\tthis._duration = duration;\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tstart: function start(time) {\n\n\t\tthis._group.add(this);\n\n\t\tthis._isPlaying = true;\n\n\t\tthis._onStartCallbackFired = false;\n\n\t\tthis._startTime = time !== undefined ? typeof time === 'string' ? TWEEN.now() + parseFloat(time) : time : TWEEN.now();\n\t\tthis._startTime += this._delayTime;\n\n\t\tfor (var property in this._valuesEnd) {\n\n\t\t\t// Check if an Array was provided as property value\n\t\t\tif (this._valuesEnd[property] instanceof Array) {\n\n\t\t\t\tif (this._valuesEnd[property].length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Create a local copy of the Array with the start value at the front\n\t\t\t\tthis._valuesEnd[property] = [this._object[property]].concat(this._valuesEnd[property]);\n\n\t\t\t}\n\n\t\t\t// If `to()` specifies a property that doesn't exist in the source object,\n\t\t\t// we should not set that property in the object\n\t\t\tif (this._object[property] === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Save the starting value.\n\t\t\tthis._valuesStart[property] = this._object[property];\n\n\t\t\tif ((this._valuesStart[property] instanceof Array) === false) {\n\t\t\t\tthis._valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings\n\t\t\t}\n\n\t\t\tthis._valuesStartRepeat[property] = this._valuesStart[property] || 0;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tstop: function stop() {\n\n\t\tif (!this._isPlaying) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis._group.remove(this);\n\t\tthis._isPlaying = false;\n\n\t\tif (this._onStopCallback !== null) {\n\t\t\tthis._onStopCallback(this._object);\n\t\t}\n\n\t\tthis.stopChainedTweens();\n\t\treturn this;\n\n\t},\n\n\tend: function end() {\n\n\t\tthis.update(this._startTime + this._duration);\n\t\treturn this;\n\n\t},\n\n\tstopChainedTweens: function stopChainedTweens() {\n\n\t\tfor (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n\t\t\tthis._chainedTweens[i].stop();\n\t\t}\n\n\t},\n\n\tgroup: function group(group) {\n\t\tthis._group = group;\n\t\treturn this;\n\t},\n\n\tdelay: function delay(amount) {\n\n\t\tthis._delayTime = amount;\n\t\treturn this;\n\n\t},\n\n\trepeat: function repeat(times) {\n\n\t\tthis._repeat = times;\n\t\treturn this;\n\n\t},\n\n\trepeatDelay: function repeatDelay(amount) {\n\n\t\tthis._repeatDelayTime = amount;\n\t\treturn this;\n\n\t},\n\n\tyoyo: function yoyo(yy) {\n\n\t\tthis._yoyo = yy;\n\t\treturn this;\n\n\t},\n\n\teasing: function easing(eas) {\n\n\t\tthis._easingFunction = eas;\n\t\treturn this;\n\n\t},\n\n\tinterpolation: function interpolation(inter) {\n\n\t\tthis._interpolationFunction = inter;\n\t\treturn this;\n\n\t},\n\n\tchain: function chain() {\n\n\t\tthis._chainedTweens = arguments;\n\t\treturn this;\n\n\t},\n\n\tonStart: function onStart(callback) {\n\n\t\tthis._onStartCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonUpdate: function onUpdate(callback) {\n\n\t\tthis._onUpdateCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonComplete: function onComplete(callback) {\n\n\t\tthis._onCompleteCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonStop: function onStop(callback) {\n\n\t\tthis._onStopCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tupdate: function update(time) {\n\n\t\tvar property;\n\t\tvar elapsed;\n\t\tvar value;\n\n\t\tif (time < this._startTime) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this._onStartCallbackFired === false) {\n\n\t\t\tif (this._onStartCallback !== null) {\n\t\t\t\tthis._onStartCallback(this._object);\n\t\t\t}\n\n\t\t\tthis._onStartCallbackFired = true;\n\t\t}\n\n\t\telapsed = (time - this._startTime) / this._duration;\n\t\telapsed = (this._duration === 0 || elapsed > 1) ? 1 : elapsed;\n\n\t\tvalue = this._easingFunction(elapsed);\n\n\t\tfor (property in this._valuesEnd) {\n\n\t\t\t// Don't update properties that do not exist in the source object\n\t\t\tif (this._valuesStart[property] === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar start = this._valuesStart[property] || 0;\n\t\t\tvar end = this._valuesEnd[property];\n\n\t\t\tif (end instanceof Array) {\n\n\t\t\t\tthis._object[property] = this._interpolationFunction(end, value);\n\n\t\t\t} else {\n\n\t\t\t\t// Parses relative end values with start as base (e.g.: +10, -3)\n\t\t\t\tif (typeof (end) === 'string') {\n\n\t\t\t\t\tif (end.charAt(0) === '+' || end.charAt(0) === '-') {\n\t\t\t\t\t\tend = start + parseFloat(end);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tend = parseFloat(end);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Protect against non numeric properties.\n\t\t\t\tif (typeof (end) === 'number') {\n\t\t\t\t\tthis._object[property] = start + (end - start) * value;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif (this._onUpdateCallback !== null) {\n\t\t\tthis._onUpdateCallback(this._object);\n\t\t}\n\n\t\tif (elapsed === 1) {\n\n\t\t\tif (this._repeat > 0) {\n\n\t\t\t\tif (isFinite(this._repeat)) {\n\t\t\t\t\tthis._repeat--;\n\t\t\t\t}\n\n\t\t\t\t// Reassign starting values, restart by making startTime = now\n\t\t\t\tfor (property in this._valuesStartRepeat) {\n\n\t\t\t\t\tif (typeof (this._valuesEnd[property]) === 'string') {\n\t\t\t\t\t\tthis._valuesStartRepeat[property] = this._valuesStartRepeat[property] + parseFloat(this._valuesEnd[property]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._yoyo) {\n\t\t\t\t\t\tvar tmp = this._valuesStartRepeat[property];\n\n\t\t\t\t\t\tthis._valuesStartRepeat[property] = this._valuesEnd[property];\n\t\t\t\t\t\tthis._valuesEnd[property] = tmp;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._valuesStart[property] = this._valuesStartRepeat[property];\n\n\t\t\t\t}\n\n\t\t\t\tif (this._yoyo) {\n\t\t\t\t\tthis._reversed = !this._reversed;\n\t\t\t\t}\n\n\t\t\t\tif (this._repeatDelayTime !== undefined) {\n\t\t\t\t\tthis._startTime = time + this._repeatDelayTime;\n\t\t\t\t} else {\n\t\t\t\t\tthis._startTime = time + this._delayTime;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\tif (this._onCompleteCallback !== null) {\n\n\t\t\t\t\tthis._onCompleteCallback(this._object);\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n\t\t\t\t\t// Make the chained tweens start exactly at the time they should,\n\t\t\t\t\t// even if the `update()` method was called way past the duration of the tween\n\t\t\t\t\tthis._chainedTweens[i].start(this._startTime + this._duration);\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n};\n\n\nTWEEN.Easing = {\n\n\tLinear: {\n\n\t\tNone: function (k) {\n\n\t\t\treturn k;\n\n\t\t}\n\n\t},\n\n\tQuadratic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn k * (2 - k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k;\n\t\t\t}\n\n\t\t\treturn - 0.5 * (--k * (k - 2) - 1);\n\n\t\t}\n\n\t},\n\n\tCubic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn --k * k * k + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k;\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * k + 2);\n\n\t\t}\n\n\t},\n\n\tQuartic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn 1 - (--k * k * k * k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k * k;\n\t\t\t}\n\n\t\t\treturn - 0.5 * ((k -= 2) * k * k * k - 2);\n\n\t\t}\n\n\t},\n\n\tQuintic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn --k * k * k * k * k + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k * k * k;\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * k * k * k + 2);\n\n\t\t}\n\n\t},\n\n\tSinusoidal: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - Math.cos(k * Math.PI / 2);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn Math.sin(k * Math.PI / 2);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\treturn 0.5 * (1 - Math.cos(Math.PI * k));\n\n\t\t}\n\n\t},\n\n\tExponential: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k === 0 ? 0 : Math.pow(1024, k - 1);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn k === 1 ? 1 : 1 - Math.pow(2, - 10 * k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * Math.pow(1024, k - 1);\n\t\t\t}\n\n\t\t\treturn 0.5 * (- Math.pow(2, - 10 * (k - 1)) + 2);\n\n\t\t}\n\n\t},\n\n\tCircular: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - Math.sqrt(1 - k * k);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn Math.sqrt(1 - (--k * k));\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn - 0.5 * (Math.sqrt(1 - k * k) - 1);\n\t\t\t}\n\n\t\t\treturn 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);\n\n\t\t}\n\n\t},\n\n\tElastic: {\n\n\t\tIn: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn Math.pow(2, -10 * k) * Math.sin((k - 0.1) * 5 * Math.PI) + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tk *= 2;\n\n\t\t\tif (k < 1) {\n\t\t\t\treturn -0.5 * Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);\n\t\t\t}\n\n\t\t\treturn 0.5 * Math.pow(2, -10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI) + 1;\n\n\t\t}\n\n\t},\n\n\tBack: {\n\n\t\tIn: function (k) {\n\n\t\t\tvar s = 1.70158;\n\n\t\t\treturn k * k * ((s + 1) * k - s);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tvar s = 1.70158;\n\n\t\t\treturn --k * k * ((s + 1) * k + s) + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tvar s = 1.70158 * 1.525;\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * (k * k * ((s + 1) * k - s));\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);\n\n\t\t}\n\n\t},\n\n\tBounce: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - TWEEN.Easing.Bounce.Out(1 - k);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tif (k < (1 / 2.75)) {\n\t\t\t\treturn 7.5625 * k * k;\n\t\t\t} else if (k < (2 / 2.75)) {\n\t\t\t\treturn 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;\n\t\t\t} else if (k < (2.5 / 2.75)) {\n\t\t\t\treturn 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;\n\t\t\t} else {\n\t\t\t\treturn 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;\n\t\t\t}\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k < 0.5) {\n\t\t\t\treturn TWEEN.Easing.Bounce.In(k * 2) * 0.5;\n\t\t\t}\n\n\t\t\treturn TWEEN.Easing.Bounce.Out(k * 2 - 1) * 0.5 + 0.5;\n\n\t\t}\n\n\t}\n\n};\n\nTWEEN.Interpolation = {\n\n\tLinear: function (v, k) {\n\n\t\tvar m = v.length - 1;\n\t\tvar f = m * k;\n\t\tvar i = Math.floor(f);\n\t\tvar fn = TWEEN.Interpolation.Utils.Linear;\n\n\t\tif (k < 0) {\n\t\t\treturn fn(v[0], v[1], f);\n\t\t}\n\n\t\tif (k > 1) {\n\t\t\treturn fn(v[m], v[m - 1], m - f);\n\t\t}\n\n\t\treturn fn(v[i], v[i + 1 > m ? m : i + 1], f - i);\n\n\t},\n\n\tBezier: function (v, k) {\n\n\t\tvar b = 0;\n\t\tvar n = v.length - 1;\n\t\tvar pw = Math.pow;\n\t\tvar bn = TWEEN.Interpolation.Utils.Bernstein;\n\n\t\tfor (var i = 0; i <= n; i++) {\n\t\t\tb += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);\n\t\t}\n\n\t\treturn b;\n\n\t},\n\n\tCatmullRom: function (v, k) {\n\n\t\tvar m = v.length - 1;\n\t\tvar f = m * k;\n\t\tvar i = Math.floor(f);\n\t\tvar fn = TWEEN.Interpolation.Utils.CatmullRom;\n\n\t\tif (v[0] === v[m]) {\n\n\t\t\tif (k < 0) {\n\t\t\t\ti = Math.floor(f = m * (1 + k));\n\t\t\t}\n\n\t\t\treturn fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);\n\n\t\t} else {\n\n\t\t\tif (k < 0) {\n\t\t\t\treturn v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);\n\t\t\t}\n\n\t\t\tif (k > 1) {\n\t\t\t\treturn v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);\n\t\t\t}\n\n\t\t\treturn fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);\n\n\t\t}\n\n\t},\n\n\tUtils: {\n\n\t\tLinear: function (p0, p1, t) {\n\n\t\t\treturn (p1 - p0) * t + p0;\n\n\t\t},\n\n\t\tBernstein: function (n, i) {\n\n\t\t\tvar fc = TWEEN.Interpolation.Utils.Factorial;\n\n\t\t\treturn fc(n) / fc(i) / fc(n - i);\n\n\t\t},\n\n\t\tFactorial: (function () {\n\n\t\t\tvar a = [1];\n\n\t\t\treturn function (n) {\n\n\t\t\t\tvar s = 1;\n\n\t\t\t\tif (a[n]) {\n\t\t\t\t\treturn a[n];\n\t\t\t\t}\n\n\t\t\t\tfor (var i = n; i > 1; i--) {\n\t\t\t\t\ts *= i;\n\t\t\t\t}\n\n\t\t\t\ta[n] = s;\n\t\t\t\treturn s;\n\n\t\t\t};\n\n\t\t})(),\n\n\t\tCatmullRom: function (p0, p1, p2, p3, t) {\n\n\t\t\tvar v0 = (p2 - p0) * 0.5;\n\t\t\tvar v1 = (p3 - p1) * 0.5;\n\t\t\tvar t2 = t * t;\n\t\t\tvar t3 = t * t2;\n\n\t\t\treturn (2 * p1 - 2 * p2 + v0 + v1) * t3 + (- 3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\n\n\t\t}\n\n\t}\n\n};\n\n// UMD (Universal Module Definition)\n(function (root) {\n\n\tif (typeof define === 'function' && define.amd) {\n\n\t\t// AMD\n\t\tdefine([], function () {\n\t\t\treturn TWEEN;\n\t\t});\n\n\t} else if (typeof module !== 'undefined' && typeof exports === 'object') {\n\n\t\t// Node.js\n\t\tmodule.exports = TWEEN;\n\n\t} else if (root !== undefined) {\n\n\t\t// Global variable\n\t\troot.TWEEN = TWEEN;\n\n\t}\n\n})(this);\n","import TWEEN from '@tweenjs/tween.js';\nimport * as THREE from 'three';\n\nexport default class Util {\n constructor(camera) {\n this.camera = camera\n }\n // 相机移动动画\n CameraTo(targetX, targetY, targetZ, callback) {\n var requsetId\n var tween = new TWEEN.Tween(this.camera.position)\n .to({ x: targetX, y: targetY, z: targetZ }, 500)\n .start()\n .onComplete((obj) => {\n callback()\n window.cancelAnimationFrame(requsetId)\n })\n \n animate();\n \n function animate() {\n requsetId = requestAnimationFrame(animate);\n TWEEN.update();\n \n // renderer.render(scene, camera);\n }\n }\n // 三维坐标转二维坐标\n windowVector(x, y, z, id) {\n var world_vector = new THREE.Vector3(x, y, z); //三维坐标\n var vector = world_vector.project(this.camera); //三维坐标在摄影机上的投影坐标 \n var halfWidth = window.innerWidth / 2;\n var halfHeight = window.innerHeight / 2;\n var wx = Math.round(vector.x * halfWidth + halfWidth); //在屏幕上的坐标\n var wy = Math.round(-vector.y * halfHeight + halfHeight); //在屏幕上的坐标 //绑CSS\n $('#'+id).css('left', wx + 15);\n $('#'+id).css('top', wy + 15);\n }\n}","var video = {\n getVideoSource(vids, videoEls) {\n // let vids = ['8892551']\n\n // var videoEls = {\n // '8892551': 'lookup',\n // }\n var mp4UrlMap = {}\n\n $.ajax({\n type: \"GET\",\n dataType: \"json\",\n url: `//video.duowan.com/jsapi/playPageVideoInfo/?vids=${vids.join(',')}`,\n success: function(data) {\n for(var i in data) {\n let resouce = video.deCodeArg(data[i].c).all,\n source = resouce.yuanhua || resouce[1300] || resouce[1000] || resouce[350]\n let name = videoEls[i] \n mp4UrlMap[name] = source.src\n }\n console.log(mp4UrlMap)\n \n for(var key in mp4UrlMap) {\n document.getElementById(key).src = mp4UrlMap[key]\n }\n }\n })\n },\n decr(r) {\n var e = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@!~*-_.()'\".split(\"\");\n var n = [];\n var a = [];\n r.split(\"\").reverse().forEach(function (r, t) {\n var o = e.indexOf(r);\n if (parseInt((t + 1) % 2) == 1) {\n a.push(o)\n } else {\n var p = parseInt(o - a[(t + 1) / 2 - 1]);\n n.push(e[p])\n }\n });\n var t = n.join(\"\").replace(/@/g, \"%\");\n return decodeURIComponent(t)\n },\n /**\n * 解密数据\n */\n deCodeArg(target) {\n var srcMap = {};\n if (JSON.parse) {\n srcMap = JSON.parse(this.decr(target));\n } else {\n srcMap = eval('(' + this.decr(target) + ')');\n }\n return srcMap;\n },\n}\n\nexport default video","/**\n * @author qiao / https://github.com/qiao\n * @author mrdoob / http://mrdoob.com\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author erich666 / http://erichaines.com\n */\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n// Orbit - left mouse / touch: one-finger move\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - right mouse, or arrow keys / touch: two-finger move\n\nimport * as THREE from 'three';\n\nTHREE.OrbitControls = function ( object, domElement ) {\n\n\tthis.object = object;\n\n\tthis.domElement = ( domElement !== undefined ) ? domElement : document;\n\n\t// Set to false to disable this control\n\tthis.enabled = true;\n\n\t// \"target\" sets the location of focus, where the object orbits around\n\tthis.target = new THREE.Vector3();\n\n\t// How far you can dolly in and out ( PerspectiveCamera only )\n\tthis.minDistance = 0;\n\tthis.maxDistance = Infinity;\n\n\t// How far you can zoom in and out ( OrthographicCamera only )\n\tthis.minZoom = 0;\n\tthis.maxZoom = Infinity;\n\n\t// How far you can orbit vertically, upper and lower limits.\n\t// Range is 0 to Math.PI radians.\n\tthis.minPolarAngle = 0; // radians\n\tthis.maxPolarAngle = Math.PI; // radians\n\n\t// How far you can orbit horizontally, upper and lower limits.\n\t// If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\n\tthis.minAzimuthAngle = - Infinity; // radians\n\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t// Set to true to enable damping (inertia)\n\t// If damping is enabled, you must call controls.update() in your animation loop\n\tthis.enableDamping = false;\n\tthis.dampingFactor = 0.25;\n\n\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t// Set to false to disable zooming\n\tthis.enableZoom = true;\n\tthis.zoomSpeed = 1.0;\n\n\t// Set to false to disable rotating\n\tthis.enableRotate = true;\n\tthis.rotateSpeed = 1.0;\n\n\t// Set to false to disable panning\n\tthis.enablePan = true;\n\tthis.panSpeed = 1.0;\n\tthis.screenSpacePanning = false; // if true, pan in screen-space\n\tthis.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\n\n\t// Set to true to automatically rotate around the target\n\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\tthis.autoRotate = false;\n\tthis.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n\t// Set to false to disable use of the keys\n\tthis.enableKeys = true;\n\n\t// The four arrow keys\n\tthis.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\n\n\t// Mouse buttons\n\tthis.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT };\n\n\t// for reset\n\tthis.target0 = this.target.clone();\n\tthis.position0 = this.object.position.clone();\n\tthis.zoom0 = this.object.zoom;\n\n\t//\n\t// public methods\n\t//\n\n\tthis.getPolarAngle = function () {\n\n\t\treturn spherical.phi;\n\n\t};\n\n\tthis.getAzimuthalAngle = function () {\n\n\t\treturn spherical.theta;\n\n\t};\n\n\tthis.saveState = function () {\n\n\t\tscope.target0.copy( scope.target );\n\t\tscope.position0.copy( scope.object.position );\n\t\tscope.zoom0 = scope.object.zoom;\n\n\t};\n\n\tthis.reset = function () {\n\n\t\tscope.target.copy( scope.target0 );\n\t\tscope.object.position.copy( scope.position0 );\n\t\tscope.object.zoom = scope.zoom0;\n\n\t\tscope.object.updateProjectionMatrix();\n\t\tscope.dispatchEvent( changeEvent );\n\n\t\tscope.update();\n\n\t\tstate = STATE.NONE;\n\n\t};\n\n\t// this method is exposed, but perhaps it would be better if we can make it private...\n\tthis.update = function () {\n\n\t\tvar offset = new THREE.Vector3();\n\n\t\t// so camera.up is the orbit axis\n\t\tvar quat = new THREE.Quaternion().setFromUnitVectors( object.up, new THREE.Vector3( 0, 1, 0 ) );\n\t\tvar quatInverse = quat.clone().inverse();\n\n\t\tvar lastPosition = new THREE.Vector3();\n\t\tvar lastQuaternion = new THREE.Quaternion();\n\n\t\treturn function update() {\n\n\t\t\tvar position = scope.object.position;\n\n\t\t\toffset.copy( position ).sub( scope.target );\n\n\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\toffset.applyQuaternion( quat );\n\n\t\t\t// angle from z-axis around y-axis\n\t\t\tspherical.setFromVector3( offset );\n\n\t\t\tif ( scope.autoRotate && state === STATE.NONE ) {\n\n\t\t\t\trotateLeft( getAutoRotationAngle() );\n\n\t\t\t}\n\n\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\tspherical.phi += sphericalDelta.phi;\n\n\t\t\t// restrict theta to be between desired limits\n\t\t\tspherical.theta = Math.max( scope.minAzimuthAngle, Math.min( scope.maxAzimuthAngle, spherical.theta ) );\n\n\t\t\t// restrict phi to be between desired limits\n\t\t\tspherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );\n\n\t\t\tspherical.makeSafe();\n\n\n\t\t\tspherical.radius *= scale;\n\n\t\t\t// restrict radius to be between desired limits\n\t\t\tspherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) );\n\n\t\t\t// move target to panned location\n\t\t\tscope.target.add( panOffset );\n\n\t\t\toffset.setFromSpherical( spherical );\n\n\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\toffset.applyQuaternion( quatInverse );\n\n\t\t\tposition.copy( scope.target ).add( offset );\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\tsphericalDelta.theta *= ( 1 - scope.dampingFactor );\n\t\t\t\tsphericalDelta.phi *= ( 1 - scope.dampingFactor );\n\n\t\t\t\tpanOffset.multiplyScalar( 1 - scope.dampingFactor );\n\n\t\t\t} else {\n\n\t\t\t\tsphericalDelta.set( 0, 0, 0 );\n\n\t\t\t\tpanOffset.set( 0, 0, 0 );\n\n\t\t\t}\n\n\t\t\tscale = 1;\n\n\t\t\t// update condition is:\n\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\t\tif ( zoomChanged ||\n\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\n\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\n\t\t\t\tzoomChanged = false;\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t};\n\n\t}();\n\n\tthis.dispose = function () {\n\n\t\tscope.domElement.removeEventListener( 'contextmenu', onContextMenu, false );\n\t\tscope.domElement.removeEventListener( 'mousedown', onMouseDown, false );\n\t\tscope.domElement.removeEventListener( 'wheel', onMouseWheel, false );\n\n\t\tscope.domElement.removeEventListener( 'touchstart', onTouchStart, false );\n\t\tscope.domElement.removeEventListener( 'touchend', onTouchEnd, false );\n\t\tscope.domElement.removeEventListener( 'touchmove', onTouchMove, false );\n\n\t\tdocument.removeEventListener( 'mousemove', onMouseMove, false );\n\t\tdocument.removeEventListener( 'mouseup', onMouseUp, false );\n\n\t\twindow.removeEventListener( 'keydown', onKeyDown, false );\n\n\t\t//scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n\n\t};\n\n\t//\n\t// internals\n\t//\n\n\tvar scope = this;\n\n\tvar changeEvent = { type: 'change' };\n\tvar startEvent = { type: 'start' };\n\tvar endEvent = { type: 'end' };\n\n\tvar STATE = { NONE: - 1, ROTATE: 0, DOLLY: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_DOLLY_PAN: 4 };\n\n\tvar state = STATE.NONE;\n\n\tvar EPS = 0.000001;\n\n\t// current position in spherical coordinates\n\tvar spherical = new THREE.Spherical();\n\tvar sphericalDelta = new THREE.Spherical();\n\n\tvar scale = 1;\n\tvar panOffset = new THREE.Vector3();\n\tvar zoomChanged = false;\n\n\tvar rotateStart = new THREE.Vector2();\n\tvar rotateEnd = new THREE.Vector2();\n\tvar rotateDelta = new THREE.Vector2();\n\n\tvar panStart = new THREE.Vector2();\n\tvar panEnd = new THREE.Vector2();\n\tvar panDelta = new THREE.Vector2();\n\n\tvar dollyStart = new THREE.Vector2();\n\tvar dollyEnd = new THREE.Vector2();\n\tvar dollyDelta = new THREE.Vector2();\n\n\tfunction getAutoRotationAngle() {\n\n\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n\t}\n\n\tfunction getZoomScale() {\n\n\t\treturn Math.pow( 0.95, scope.zoomSpeed );\n\n\t}\n\n\tfunction rotateLeft( angle ) {\n\n\t\tsphericalDelta.theta -= angle;\n\n\t}\n\n\tfunction rotateUp( angle ) {\n\n\t\tsphericalDelta.phi -= angle;\n\n\t}\n\n\tvar panLeft = function () {\n\n\t\tvar v = new THREE.Vector3();\n\n\t\treturn function panLeft( distance, objectMatrix ) {\n\n\t\t\tv.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n\t\t\tv.multiplyScalar( - distance );\n\n\t\t\tpanOffset.add( v );\n\n\t\t};\n\n\t}();\n\n\tvar panUp = function () {\n\n\t\tvar v = new THREE.Vector3();\n\n\t\treturn function panUp( distance, objectMatrix ) {\n\n\t\t\tif ( scope.screenSpacePanning === true ) {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 1 );\n\n\t\t\t} else {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 );\n\t\t\t\tv.crossVectors( scope.object.up, v );\n\n\t\t\t}\n\n\t\t\tv.multiplyScalar( distance );\n\n\t\t\tpanOffset.add( v );\n\n\t\t};\n\n\t}();\n\n\t// deltaX and deltaY are in pixels; right and down are positive\n\tvar pan = function () {\n\n\t\tvar offset = new THREE.Vector3();\n\n\t\treturn function pan( deltaX, deltaY ) {\n\n\t\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t// perspective\n\t\t\t\tvar position = scope.object.position;\n\t\t\t\toffset.copy( position ).sub( scope.target );\n\t\t\t\tvar targetDistance = offset.length();\n\n\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\ttargetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\n\t\t\t\tpanLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\n\t\t\t\tpanUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t// orthographic\n\t\t\t\tpanLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );\n\t\t\t\tpanUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );\n\n\t\t\t} else {\n\n\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\t\t\t\tscope.enablePan = false;\n\n\t\t\t}\n\n\t\t};\n\n\t}();\n\n\tfunction dollyIn( dollyScale ) {\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscale /= dollyScale;\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) );\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tzoomChanged = true;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tscope.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\tfunction dollyOut( dollyScale ) {\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscale *= dollyScale;\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) );\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tzoomChanged = true;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tscope.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\t//\n\t// event callbacks - update the object state\n\t//\n\n\tfunction handleMouseDownRotate( event ) {\n\n\t\t//console.log( 'handleMouseDownRotate' );\n\n\t\trotateStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseDownDolly( event ) {\n\n\t\t//console.log( 'handleMouseDownDolly' );\n\n\t\tdollyStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseDownPan( event ) {\n\n\t\t//console.log( 'handleMouseDownPan' );\n\n\t\tpanStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseMoveRotate( event ) {\n\n\t\t//console.log( 'handleMouseMoveRotate' );\n\n\t\trotateEnd.set( event.clientX, event.clientY );\n\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\trotateStart.copy( rotateEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseMoveDolly( event ) {\n\n\t\t//console.log( 'handleMouseMoveDolly' );\n\n\t\tdollyEnd.set( event.clientX, event.clientY );\n\n\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\n\n\t\tif ( dollyDelta.y > 0 ) {\n\n\t\t\tdollyIn( getZoomScale() );\n\n\t\t} else if ( dollyDelta.y < 0 ) {\n\n\t\t\tdollyOut( getZoomScale() );\n\n\t\t}\n\n\t\tdollyStart.copy( dollyEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseMovePan( event ) {\n\n\t\t//console.log( 'handleMouseMovePan' );\n\n\t\tpanEnd.set( event.clientX, event.clientY );\n\n\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\tpan( panDelta.x, panDelta.y );\n\n\t\tpanStart.copy( panEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseUp( event ) {\n\n\t\t// console.log( 'handleMouseUp' );\n\n\t}\n\n\tfunction handleMouseWheel( event ) {\n\n\t\t// console.log( 'handleMouseWheel' );\n\n\t\tif ( event.deltaY < 0 ) {\n\n\t\t\tdollyOut( getZoomScale() );\n\n\t\t} else if ( event.deltaY > 0 ) {\n\n\t\t\tdollyIn( getZoomScale() );\n\n\t\t}\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleKeyDown( event ) {\n\n\t\t//console.log( 'handleKeyDown' );\n\n\t\tswitch ( event.keyCode ) {\n\n\t\t\tcase scope.keys.UP:\n\t\t\t\tpan( 0, scope.keyPanSpeed );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.BOTTOM:\n\t\t\t\tpan( 0, - scope.keyPanSpeed );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.LEFT:\n\t\t\t\tpan( scope.keyPanSpeed, 0 );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.RIGHT:\n\t\t\t\tpan( - scope.keyPanSpeed, 0 );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction handleTouchStartRotate( event ) {\n\n\t\t//console.log( 'handleTouchStartRotate' );\n\n\t\trotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t}\n\n\tfunction handleTouchStartDollyPan( event ) {\n\n\t\t//console.log( 'handleTouchStartDollyPan' );\n\n\t\tif ( scope.enableZoom ) {\n\n\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tdollyStart.set( 0, distance );\n\n\t\t}\n\n\t\tif ( scope.enablePan ) {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\tpanStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\tfunction handleTouchMoveRotate( event ) {\n\n\t\t//console.log( 'handleTouchMoveRotate' );\n\n\t\trotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\trotateStart.copy( rotateEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleTouchMoveDollyPan( event ) {\n\n\t\t//console.log( 'handleTouchMoveDollyPan' );\n\n\t\tif ( scope.enableZoom ) {\n\n\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tdollyEnd.set( 0, distance );\n\n\t\t\tdollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );\n\n\t\t\tdollyIn( dollyDelta.y );\n\n\t\t\tdollyStart.copy( dollyEnd );\n\n\t\t}\n\n\t\tif ( scope.enablePan ) {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\tpanEnd.set( x, y );\n\n\t\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\t\tpan( panDelta.x, panDelta.y );\n\n\t\t\tpanStart.copy( panEnd );\n\n\t\t}\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleTouchEnd( event ) {\n\n\t\t//console.log( 'handleTouchEnd' );\n\n\t}\n\n\t//\n\t// event handlers - FSM: listen for events and reset state\n\t//\n\n\tfunction onMouseDown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( event.button ) {\n\n\t\t\tcase scope.mouseButtons.ORBIT:\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\tbreak;\n\n\t\t\tcase scope.mouseButtons.ZOOM:\n\n\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\thandleMouseDownDolly( event );\n\n\t\t\t\tstate = STATE.DOLLY;\n\n\t\t\t\tbreak;\n\n\t\t\tcase scope.mouseButtons.PAN:\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) {\n\n\t\t\tdocument.addEventListener( 'mousemove', onMouseMove, false );\n\t\t\tdocument.addEventListener( 'mouseup', onMouseUp, false );\n\n\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t}\n\n\t}\n\n\tfunction onMouseMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( state ) {\n\n\t\t\tcase STATE.ROTATE:\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleMouseMoveRotate( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.DOLLY:\n\n\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\thandleMouseMoveDolly( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.PAN:\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleMouseMovePan( event );\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction onMouseUp( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\thandleMouseUp( event );\n\n\t\tdocument.removeEventListener( 'mousemove', onMouseMove, false );\n\t\tdocument.removeEventListener( 'mouseup', onMouseUp, false );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tfunction onMouseWheel( event ) {\n\n\t\tif ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tscope.dispatchEvent( startEvent );\n\n\t\thandleMouseWheel( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction onKeyDown( event ) {\n\n\t\tif ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return;\n\n\t\thandleKeyDown( event );\n\n\t}\n\n\tfunction onTouchStart( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\t// one-fingered touch: rotate\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleTouchStartRotate( event );\n\n\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\t// two-fingered touch: dolly-pan\n\n\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\thandleTouchStartDollyPan( event );\n\n\t\t\t\tstate = STATE.TOUCH_DOLLY_PAN;\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) {\n\n\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t}\n\n\t}\n\n\tfunction onTouchMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1: // one-fingered touch: rotate\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\t\t\t\tif ( state !== STATE.TOUCH_ROTATE ) return; // is this needed?\n\n\t\t\t\thandleTouchMoveRotate( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 2: // two-fingered touch: dolly-pan\n\n\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\t\t\t\tif ( state !== STATE.TOUCH_DOLLY_PAN ) return; // is this needed?\n\n\t\t\t\thandleTouchMoveDollyPan( event );\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t}\n\n\tfunction onTouchEnd( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\thandleTouchEnd( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tfunction onContextMenu( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t}\n\n\t//\n\n\tscope.domElement.addEventListener( 'contextmenu', onContextMenu, false );\n\n\tscope.domElement.addEventListener( 'mousedown', onMouseDown, false );\n\tscope.domElement.addEventListener( 'wheel', onMouseWheel, false );\n\n\tscope.domElement.addEventListener( 'touchstart', onTouchStart, false );\n\tscope.domElement.addEventListener( 'touchend', onTouchEnd, false );\n\tscope.domElement.addEventListener( 'touchmove', onTouchMove, false );\n\n\twindow.addEventListener( 'keydown', onKeyDown, false );\n\n\t// force an update at start\n\n\tthis.update();\n\n};\n\nTHREE.OrbitControls.prototype = Object.create( THREE.EventDispatcher.prototype );\nTHREE.OrbitControls.prototype.constructor = THREE.OrbitControls;\n\nObject.defineProperties( THREE.OrbitControls.prototype, {\n\n\tcenter: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .center has been renamed to .target' );\n\t\t\treturn this.target;\n\n\t\t}\n\n\t},\n\n\t// backward compatibility\n\n\tnoZoom: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );\n\t\t\treturn ! this.enableZoom;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );\n\t\t\tthis.enableZoom = ! value;\n\n\t\t}\n\n\t},\n\n\tnoRotate: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );\n\t\t\treturn ! this.enableRotate;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );\n\t\t\tthis.enableRotate = ! value;\n\n\t\t}\n\n\t},\n\n\tnoPan: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );\n\t\t\treturn ! this.enablePan;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );\n\t\t\tthis.enablePan = ! value;\n\n\t\t}\n\n\t},\n\n\tnoKeys: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );\n\t\t\treturn ! this.enableKeys;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );\n\t\t\tthis.enableKeys = ! value;\n\n\t\t}\n\n\t},\n\n\tstaticMoving: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );\n\t\t\treturn ! this.enableDamping;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );\n\t\t\tthis.enableDamping = ! value;\n\n\t\t}\n\n\t},\n\n\tdynamicDampingFactor: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );\n\t\t\treturn this.dampingFactor;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );\n\t\t\tthis.dampingFactor = value;\n\n\t\t}\n\n\t}\n\n} );\n","import '../scss/style.scss'\nimport '../scss/iphonex.scss'\nimport '../scss/swiper-4.1.6.min.css'\n\nimport * as THREE from 'three';\nimport 'three/examples/js/loaders/GLTFLoader';\n\nimport Swiper from './lib/swiper-4.1.6.min';\n\nimport UTIL from './util';\nimport Video from './video';\nimport 'three/examples/js/controls/OrbitControls';\n\nimport textureBox from '../texture/box-location.png'\n\n// 全景图\nimport negx from '../texture/bg/negx.jpg'\nimport negy from '../texture/bg/negy.jpg'\nimport negz from '../texture/bg/negz.jpg'\nimport posx from '../texture/bg/posx.jpg'\nimport posy from '../texture/bg/posy.jpg'\nimport posz from '../texture/bg/posz.jpg'\n\nvar container, controls;\nvar camera, scene, renderer;\n\nvar projectiveObj;//定义上次投射到的对象\nvar raycaster = new THREE.Raycaster();//光线投射器\nvar mouse = new THREE.Vector2();//二维向量 \n\ndocument.addEventListener('mousemove', function(){\n event.preventDefault();\n mouse.x = (event.clientX / window.innerWidth) * 2 - 1;\n mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;\n}, false);\n\n$(document).on('click', function(){\n $('.modal').fadeOut()\n controls ? controls.autoRotate = true : ''\n})\n\n\n/**\n * 添加鼠标点击事件,捕获点击时当前选中的物体\n */\nwindow.addEventListener( 'click', function(){\n if(projectiveObj){\n controls.autoRotate = false\n $('.entry-tips').hide()\n var Util = new UTIL(camera)\n var dataInfo = projectiveObj.dataInfo\n\n $('.modal-left-img').fadeOut()\n $('.modal-right').fadeOut()\n $('.modal-hide').fadeOut()\n\n if(dataInfo == 'screen') {\n Util.CameraTo(0, 0, 150, function() {\n $('#modal1').fadeIn()\n $('.modal-group1').addClass('fadeInLeft').show()\n })\n }\n if(dataInfo == 'faceId') {\n Util.CameraTo(-20, 40, 100, function() {\n $('#modal2').fadeIn()\n // $('.modal-group2').fadeIn()\n $('.modal-group2').addClass('fadeInLeft').show()\n })\n }\n if(dataInfo == 'camera') {\n Util.CameraTo(20, 20, 180, function() {\n $('#modal3').fadeIn()\n $('.modal-group3').addClass('fadeInRight').show()\n })\n }\n if(dataInfo == 'back-camera') {\n Util.CameraTo(40, 50, -160, function() {\n $('#modal4').fadeIn()\n $('.modal-group4').addClass('fadeInRight').show()\n })\n }\n if(dataInfo == 'A11') {\n Util.CameraTo(0, 0, -150, function() {\n $('#modal5').fadeIn()\n $('.modal-group5').addClass('fadeInRight').show()\n })\n }\n }\n}, false );\n\nfunction init() {\n container = document.createElement( 'div' );\n document.body.appendChild( container );\n\n // 视角:90度\n // 镜头宽高比: window.innerWidth / window.innerHeight\n // 近平面距离: 0.1\n // 远平面距离:1000\n\n camera = new THREE.PerspectiveCamera( 90, window.innerWidth / window.innerHeight, 0.1, 1000 );\n camera.position.z = 200\n camera.position.y = 0\n camera.position.x = 0\n\n if(window.location.search) {\n controls = new THREE.OrbitControls( camera );\n controls.autoRotate = true\n controls.autoRotateSpeed = 1\n controls.enablePan = false\n // controls.enableZoom = false\n controls.maxDistance = 300\n controls.minDistance = 200\n }\n\n scene = new THREE.Scene();\n\n scene.add( new THREE.HemisphereLight(0xffffff, 0xffffff, 1) );\n\n // envmap\n var path = 'iphoneX1/bg/';\n var format = '.jpg';\n var envMap = new THREE.CubeTextureLoader().load( [\n posx, negx,\n posy, negy,\n posz, negz\n ] );\n // scene.background = envMap\n // 添加辅助线\n\t// var helper = new THREE.GridHelper( 500, 100 );\n // helper.position.y = -50;\n // helper.material.opacity = 0.25;\n // helper.material.transparent = true;\n // scene.add( helper );\n //参数设置了三条轴线的长度\n // var axes = new THREE.AxisHelper(800);\n // scene.add(axes);\n\n // 创建互动点\n var geometry = new THREE.SphereGeometry(2,32,32);//盒子模型\n var tranGeometry = new THREE.SphereGeometry(6,96,96);//盒子模型\n\n var material = new THREE.MeshLambertMaterial({color: 0xffc000, transparent: true, opacity: 0.8})\n var tranMaterial = new THREE.MeshLambertMaterial({color: 0x0000ff, transparent: true, opacity: 0});\n\n var point1 = new THREE.Mesh( geometry, material );\n point1.position.set(0,0,8)\n scene.add( point1 );\n\n var tranPoint1 = new THREE.Mesh( tranGeometry, tranMaterial );\n tranPoint1.position.set(0,0,8) \n tranPoint1.dataInfo = 'screen'\n scene.add(tranPoint1)\n\n var point2 = new THREE.Mesh( geometry, material );\n point2.position.set(-12,119,10)\n scene.add( point2 );\n\n var tranPoint2 = new THREE.Mesh( tranGeometry, tranMaterial );\n tranPoint2.position.set(-12,119,10) \n tranPoint2.dataInfo = 'faceId'\n scene.add(tranPoint2)\n\n var point3 = new THREE.Mesh( geometry, material );\n point3.position.set(17,119,10) \n scene.add( point3 );\n\n var tranPoint3 = new THREE.Mesh( tranGeometry, tranMaterial );\n tranPoint3.position.set(17,119,10) \n tranPoint3.dataInfo = 'camera'\n scene.add(tranPoint3)\n \n\n var point4 = new THREE.Mesh( geometry, material );\n point4.position.set(45,98,-10)\n scene.add( point4 );\n\n var tranPoint4 = new THREE.Mesh( tranGeometry, tranMaterial );\n tranPoint4.position.set(45,98,-10) \n tranPoint4.dataInfo = 'back-camera'\n scene.add(tranPoint4)\n\n var point5 = new THREE.Mesh( geometry, material );\n point5.position.set(-26,55,-12)\n scene.add( point5 );\n\n var tranPoint5 = new THREE.Mesh( tranGeometry, tranMaterial );\n tranPoint5.position.set(-26,55,-12) \n tranPoint5.dataInfo = 'A11'\n scene.add(tranPoint5)\n\n\n // 加载3D模型\n var loader = new THREE.GLTFLoader();\n loader.load( 'iphonex/scene.gltf', function ( object ) {\n object.scene.traverse( function ( child ) {\n if ( child.isMesh ) {\n child.material.envMap = envMap;\n console.log(child)\n }\n } );\n\n scene.add( object.scene );\n });\n\n renderer = new THREE.WebGLRenderer({\n antialias: true,\n alpha: true\n });\n renderer.setClearColor(0x000000, 0);\n renderer.setPixelRatio( window.devicePixelRatio );\n renderer.setSize( window.innerWidth, window.innerHeight );\n container.appendChild( renderer.domElement );\n window.addEventListener( 'resize', resize, false );\n}\nfunction resize() {\n camera.aspect = window.innerWidth / window.innerHeight;\n camera.updateProjectionMatrix();\n renderer.setSize( window.innerWidth, window.innerHeight );\n}\nfunction animate() {\n if(controls) {\n controls.update();\n }\n renderRaycasterObj(raycaster,scene,camera,mouse);//渲染光投射器投射到的对象\n renderer.render( scene, camera );\n\n //重新渲染标签位置\n var Util = new UTIL(camera)\n Util.windowVector(0, 0, 8, 'modal1');\n Util.windowVector(-12,119,10, 'modal2');\n Util.windowVector(17,119,10, 'modal3');\n Util.windowVector(45,98,-10, 'modal4');\n Util.windowVector(-26,55,-12, 'modal5');\n \n requestAnimationFrame( animate );\n}\n\n/**\n * 根据光投射器判断鼠标所在向量方向是否穿过物体\n */\nfunction renderRaycasterObj(raycaster,scene,camera,mouse) {\n raycaster.setFromCamera(mouse, camera);\n var intersects = raycaster.intersectObjects(scene.children);\n if (intersects.length > 0) {\n var currentProjectiveObjT = intersects[0].object;\n if (projectiveObj != currentProjectiveObjT) {\n if((currentProjectiveObjT instanceof THREE.AxisHelper) || (currentProjectiveObjT instanceof THREE.GridHelper)){\n //穿过的是坐标轴线和网格线\n return;\n }\n projectiveObj = intersects[0].object;\n }\n } else {\n projectiveObj = null;\n }\n}\n\n// 弹窗根随球体\n// function modalAnimate() { \n// var Util = new UTIL(camera)\n// //重新渲染标签位置\n// Util.windowVector(0, 0, 8, 'modal1');\n// Util.windowVector(-12,119,10, 'modal2');\n// Util.windowVector(17,119,10, 'modal3');\n// Util.windowVector(45,98,-10, 'modal4');\n// Util.windowVector(-26,55,-12, 'modal5');\n// //每帧渲染\n// // renderer.render(scene, camera);\n// requestAnimationFrame(modalAnimate);\n// }\n\n\ninit();\n// animate();\n\n// modalAnimate()\n\n// ---- 弹窗交互相关 ------\nvar timer\nvar scrollFlag = false\nvar frontCameraSwiper = null\nvar screenSwiper = null\nvar planeSwiper = null\nvar faceSwiper = null\nvar backCameraSwiper = null\n\n\n// 入口页滚动进入\nif(!window.location.search && !controls) {\n $(document).on('mousewheel DOMMouseScroll', function (e) {\n //WebKit内核,Trident内核 => mousewheel\n //Gecko内核 => DOMMouseScroll\n e.preventDefault();\n var value = e.originalEvent.wheelDelta || -e.originalEvent.detail;\n //e.originalEvent.wheelDelta => 120(up) or -120(down) 谷歌IE内核\n //e.originalEvent.detail => -3(up) or 3(down) 火狐内核\n var delta = Math.max(-1, Math.min(1, value));\n // console.log(delta < 0 ? 'down' : 'up');\n if(delta < 0 && !scrollFlag) {\n clearInterval(timer)\n $('.iphonex-wrapper').fadeOut()\n $('.full-video').fadeIn()\n document.getElementById('entry-video').play()\n if(!controls) {\n controls = new THREE.OrbitControls( camera );\n controls.autoRotate = true\n controls.autoRotateSpeed = 1\n controls.enablePan = false\n // controls.enableZoom = false\n controls.maxDistance = 300\n controls.minDistance = 200\n }\n scrollFlag = true\n animate()\n }\n });\n}\n\nvar View = {\n init() {\n this.setVideoSrc()\n this.handleModal()\n\n // 场景二回到场景一,不显示介绍\n var search = window.location.search\n if(search) {\n $('.iphonex-wrapper').hide()\n animate()\n } else {\n this.phoneChange()\n }\n\n $('.arrow').click(function() {\n clearInterval(timer)\n $('.iphonex-wrapper').fadeOut()\n $('.full-video').fadeIn()\n document.getElementById('entry-video').play()\n if(!controls) {\n controls = new THREE.OrbitControls( camera );\n controls.autoRotate = true\n controls.autoRotateSpeed = 1\n controls.enablePan = false\n // controls.enableZoom = false\n controls.maxDistance = 300\n controls.minDistance = 200\n }\n animate()\n })\n },\n setVideoSrc() {\n var vids = [8925251, 8904623, 8904999, 8908143, 8908435, 8908441,8908437,8908443,\n 8909221, 8909229,8925097]\n var videoEls = {\n '8925251': 'entry-video',\n '8904623': 'face-video1',\n '8904999': 'face-video2',\n '8908143': 'back-camera-video',\n '8908435': 'front-camera-video',\n '8908441': 'front-camera-video2',\n '8908437': 'front-camera-video3',\n '8908443': 'front-camera-video4',\n '8909221': 'screen-video1',\n '8909229': 'screen-video2',\n '8925097': 'suggest-video',\n }\n Video.getVideoSource(vids, videoEls)\n\n var entryVideo = document.getElementById('entry-video')\n entryVideo.addEventListener('ended', function() {\n $('.full-video').hide()\n })\n\n $('.video-next-btn').click(function(){\n entryVideo.pause()\n $('.full-video').hide()\n })\n },\n phoneChange() {\n var flag = true\n var $phone = $('.iphone-pic')\n var $phoneDown = $('.down-iphone-pic')\n timer = setInterval(() => {\n if(flag) {\n flag = false\n $phone.fadeOut('slow')\n $phoneDown.fadeIn('slow')\n } else {\n flag = true\n $phone.fadeIn('slow')\n $phoneDown.fadeOut('slow')\n }\n }, 6000);\n },\n videoPause() {\n var videoList = document.getElementsByTagName('video')\n for(var i = 0; i < videoList.length; i++) {\n videoList[i].pause()\n }\n },\n handleModal() {\n\n var $videoCon = $('.full-video-wrap')\n\n $('.close-full-video').click(function() {\n $(this).parent().hide()\n $videoCon.find('video').hide()\n var videoList = document.getElementsByTagName('video')\n for(var i = 0; i < videoList.length; i++) {\n videoList[i].pause()\n }\n })\n\n // 屏幕\n $('#modal1-poster1').click(function() {\n $('#screen-video1').show()\n $videoCon.show()\n document.getElementById('screen-video1').play()\n })\n $('#screen-know-more').click(function() {\n $('.screen-swiper').removeClass('fadeOutDown').addClass('fadeInUp').show()\n if(!screenSwiper) {\n View.swiperScreenCamera()\n }\n document.getElementById('screen-video2').currentTime = 0\n document.getElementById('screen-video2').play()\n })\n $('#close-screen-swiper').click(function() {\n View.videoPause()\n $('.screen-swiper').removeClass('fadeInUp').addClass('fadeOutDown')\n screenSwiper.slideTo(0, 0, false)\n })\n $('#reset-screen-video2').click(function() {\n document.getElementById('screen-video2').currentTime = 0\n document.getElementById('screen-video2').play()\n })\n\n // faceid\n $('#modal2-poster1').click(function() {\n $('#face-video1').show()\n $videoCon.show()\n document.getElementById('face-video1').play()\n })\n $('#modal2-poster2').click(function() {\n $('#face-video2').show()\n $videoCon.show()\n document.getElementById('face-video2').play()\n })\n $('#face-know-more').click(function() {\n $('.face-swiper').removeClass('fadeOutDown').addClass('fadeInUp').show()\n if(!faceSwiper) {\n View.swiperFace()\n }\n })\n $('#close-face-swiper').click(function() {\n $('.face-swiper').removeClass('fadeInUp').addClass('fadeOutDown')\n faceSwiper.slideTo(0, 0, false)\n })\n\n // 前置摄像头\n $('#modal3-poster').click(function() {\n $('#front-camera-video').show()\n $videoCon.show()\n document.getElementById('front-camera-video').play()\n })\n\n $('#modal3-poster1').click(function() {\n $('#front-camera-video3').show()\n $videoCon.show()\n document.getElementById('front-camera-video3').play()\n })\n $('#camera-know-more').click(function() {\n $('.camera-swiper').removeClass('fadeOutDown').addClass('fadeInUp').show()\n if(!frontCameraSwiper) {\n View.swiperFrontCamera()\n }\n })\n $('#close-camera-siwper').click(function() {\n View.videoPause()\n $('.camera-swiper').removeClass('fadeInUp').addClass('fadeOutDown')\n frontCameraSwiper.slideTo(0, 0, false)\n })\n\n // 后置摄像头\n $('#modal4-poster').click(function() {\n $('#back-camera-video').show()\n $videoCon.show()\n document.getElementById('back-camera-video').play()\n })\n $('#backcamera-know-more').click(function() {\n $('.back-camera-swiper').removeClass('fadeOutDown').addClass('fadeInUp').show()\n if(!backCameraSwiper) {\n View.swiperBackCamera()\n }\n })\n $('#close-backcamera-swiper').click(function() {\n $('.back-camera-swiper').removeClass('fadeInUp').addClass('fadeOutDown')\n backCameraSwiper.slideTo(0, 0, false)\n })\n\n // 玻璃后盖\n $('#plane-know-more').click(function() {\n $('.plane-swiper').removeClass('fadeOutDown').addClass('fadeInUp').show()\n if(!planeSwiper) {\n View.swiperPlane()\n }\n })\n $('#close-plane-swiper').click(function() {\n $('.plane-swiper').removeClass('fadeInUp').addClass('fadeOutDown')\n planeSwiper.slideTo(0, 0, false)\n })\n\n // 全屏视频结束自动退出\n var videoBox = document.getElementsByClassName('full-video-wrap')[0]\n var videos = videoBox.getElementsByTagName('video')\n for(var i = 0; i < videos.length; i++) {\n videos[i].addEventListener('ended', function() {\n $videoCon.hide()\n $videoCon.find('video').hide()\n })\n }\n\n // 评测视频\n $('#suggest-watch').click(function() {\n $('#suggest-video').show()\n $videoCon.show()\n document.getElementById('suggest-video').play()\n })\n\n // 进入扩展页,停止转动和缩放\n $('.bottom-more-btn').find('button').click(function(e) {\n controls.enableZoom = false\n return false\n })\n $('.close-swiper-btn').click(function() {\n controls.enableZoom = true\n return false\n })\n },\n swiperFrontCamera() {\n\n var ipxVideo = document.getElementById('front-camera-video2')\n var ipxVideo4 = document.getElementById('front-camera-video4')\n // 前置\n frontCameraSwiper = new Swiper('.swiper-front-camera',{\n direction : 'vertical',\n speed:800,\n mousewheel: true,\n pagination: {\n el: '.swiper-pagination',\n clickable: true,\n },\n on:{\n slideChangeTransitionStart: function(){\n // alert(this.activeIndex);\n if(this.activeIndex == 1) {\n ipxVideo.play()\n } else {\n ipxVideo.pause()\n }\n\n if(this.activeIndex == 2) {\n ipxVideo4.play()\n } else {\n ipxVideo4.pause()\n }\n }\n }\n });\n\n // 重播\n $('#reset-front-video2').click(function() {\n ipxVideo.currentTime = 0\n ipxVideo.play()\n })\n $('#reset-front-video4').click(function() {\n ipxVideo4.currentTime = 0\n ipxVideo4.play()\n })\n },\n swiperScreenCamera() {\n var ipxVideo = document.getElementById('screen-video2')\n\n screenSwiper = new Swiper('#screen-swiper',{\n direction : 'vertical',\n speed:800,\n mousewheel: true,\n pagination: {\n el: '.swiper-pagination',\n clickable: true,\n },\n on:{\n slideChangeTransitionStart: function(){\n if(this.activeIndex == 0) {\n setTimeout(() => {\n ipxVideo.play()\n }, 500);\n } else {\n ipxVideo.pause()\n }\n }\n }\n });\n },\n swiperPlane() {\n planeSwiper = new Swiper('.swiper-plane',{\n direction : 'vertical',\n speed:800,\n mousewheel: true,\n pagination: {\n el: '.swiper-pagination',\n clickable: true,\n },\n on:{\n }\n });\n },\n swiperFace() {\n faceSwiper = new Swiper('.swiper-face',{\n direction : 'vertical',\n speed:800,\n mousewheel: true,\n pagination: {\n el: '.swiper-pagination',\n clickable: true,\n },\n on:{\n }\n });\n },\n swiperBackCamera() {\n backCameraSwiper = new Swiper('.swiper-back-camera',{\n direction : 'vertical',\n speed:800,\n mousewheel: true,\n pagination: {\n el: '.swiper-pagination',\n clickable: true,\n },\n on:{\n }\n });\n }\n}\n\nView.init()","var bundleURL = null;\nfunction getBundleURLCached() {\n if (!bundleURL) {\n bundleURL = getBundleURL();\n }\n\n return bundleURL;\n}\n\nfunction getBundleURL() {\n // Attempt to find the URL of the current script and use that as the base URL\n try {\n throw new Error;\n } catch (err) {\n var matches = ('' + err.stack).match(/(https?|file|ftp):\\/\\/[^)\\n]+/g);\n if (matches) {\n return getBaseURL(matches[0]);\n }\n }\n\n return '/';\n}\n\nfunction getBaseURL(url) {\n return ('' + url).replace(/^((?:https?|file|ftp):\\/\\/.+)\\/[^/]+$/, '$1') + '/';\n}\n\nexports.getBundleURL = getBundleURLCached;\nexports.getBaseURL = getBaseURL;\n","var bundle = require('./bundle-url');\n\nfunction updateLink(link) {\n var newLink = link.cloneNode();\n newLink.onload = function () {\n link.remove();\n };\n newLink.href = link.href.split('?')[0] + '?' + Date.now();\n link.parentNode.insertBefore(newLink, link.nextSibling);\n}\n\nvar cssTimeout = null;\nfunction reloadCSS() {\n if (cssTimeout) {\n return;\n }\n\n cssTimeout = setTimeout(function () {\n var links = document.querySelectorAll('link[rel=\"stylesheet\"]');\n for (var i = 0; i < links.length; i++) {\n if (bundle.getBaseURL(links[i].href) === bundle.getBundleURL()) {\n updateLink(links[i]);\n }\n }\n\n cssTimeout = null;\n }, 50);\n}\n\nmodule.exports = reloadCSS;\n"]}
|