diff --git a/dist/saver.js b/dist/saver.js new file mode 100644 index 0000000..31b731f --- /dev/null +++ b/dist/saver.js @@ -0,0 +1,15977 @@ +var t; +t = function() { + "use strict"; + + function t() {} + + function e(t, e) { + this.x = t || 0, this.y = e || 0 + } + + function n(t, e, n, i) { + this._x = t || 0, this._y = e || 0, this._z = n || 0, this._w = void 0 !== i ? i : 1 + } + + function i(t, e, n) { + this.x = t || 0, this.y = e || 0, this.z = n || 0 + } + + function r() { + this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1], arguments.length + } + + function o(t, n, i, a, s, c, l, u, h, p) { + Object.defineProperty(this, "id", { + value: lc++ + }), this.uuid = ic.generateUUID(), this.name = "", this.image = void 0 !== t ? t : o.DEFAULT_IMAGE, this.mipmaps = [], this.mapping = void 0 !== n ? n : o.DEFAULT_MAPPING, this.wrapS = void 0 !== i ? i : Ba, this.wrapT = void 0 !== a ? a : Ba, this.magFilter = void 0 !== s ? s : Wa, this.minFilter = void 0 !== c ? c : qa, this.anisotropy = void 0 !== h ? h : 1, this.format = void 0 !== l ? l : ss, this.type = void 0 !== u ? u : Xa, this.offset = new e(0, 0), this.repeat = new e(1, 1), this.center = new e(0, 0), this.rotation = 0, this.matrixAutoUpdate = 1, this.matrix = new r, this.generateMipmaps = 1, this.premultiplyAlpha = 0, this.flipY = 1, this.unpackAlignment = 4, this.encoding = void 0 !== p ? p : js, this.version = 0, this.onUpdate = null + } + + function a(t, e, n, i) { + this.x = t || 0, this.y = e || 0, this.z = n || 0, this.w = void 0 !== i ? i : 1 + } + + function s(t, e, n) { + this.width = t, this.height = e, this.scissor = new a(0, 0, t, e), this.scissorTest = 0, this.viewport = new a(0, 0, t, e), n = n || {}, this.texture = new o(void 0, void 0, n.wrapS, n.wrapT, n.magFilter, n.minFilter, n.format, n.type, n.anisotropy, n.encoding), this.texture.image = {}, this.texture.image.width = t, this.texture.image.height = e, this.texture.generateMipmaps = void 0 !== n.generateMipmaps ? n.generateMipmaps : 0, this.texture.minFilter = void 0 !== n.minFilter ? n.minFilter : Wa, this.depthBuffer = void 0 !== n.depthBuffer ? n.depthBuffer : 1, this.stencilBuffer = void 0 !== n.stencilBuffer ? n.stencilBuffer : 1, this.depthTexture = void 0 !== n.depthTexture ? n.depthTexture : null + } + + function c(t, e, n) { + s.call(this, t, e, n), this.samples = 4 + } + + function l() { + this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], arguments.length + } + + function u(t, e, n, i) { + this._x = t || 0, this._y = e || 0, this._z = n || 0, this._order = i || u.DefaultOrder + } + + function h() { + this.mask = 1 + } + + function p() { + var t, e, o, a; + Object.defineProperty(this, "id", { + value: xc++ + }), this.uuid = ic.generateUUID(), this.name = "", this.type = "Object3D", this.parent = null, this.children = [], this.up = p.DefaultUp.clone(), t = new i, e = new u, o = new n, a = new i(1, 1, 1), e._onChange(function() { + o.setFromEuler(e, 0) + }), o._onChange(function() { + e.setFromQuaternion(o, void 0, 0) + }), Object.defineProperties(this, { + position: { + configurable: 1, + enumerable: 1, + value: t + }, + rotation: { + configurable: 1, + enumerable: 1, + value: e + }, + quaternion: { + configurable: 1, + enumerable: 1, + value: o + }, + scale: { + configurable: 1, + enumerable: 1, + value: a + }, + modelViewMatrix: { + value: new l + }, + normalMatrix: { + value: new r + } + }), this.matrix = new l, this.matrixWorld = new l, this.matrixAutoUpdate = p.DefaultMatrixAutoUpdate, this.matrixWorldNeedsUpdate = 0, this.layers = new h, this.visible = 1, this.castShadow = 0, this.receiveShadow = 0, this.frustumCulled = 1, this.renderOrder = 0, this.userData = {} + } + + function d() { + p.call(this), this.type = "Scene", this.background = null, this.fog = null, this.overrideMaterial = null, this.autoUpdate = 1, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { + detail: this + })) + } + + function f(t, e) { + this.min = void 0 !== t ? t : new i(1 / 0, 1 / 0, 1 / 0), this.max = void 0 !== e ? e : new i(-1 / 0, -1 / 0, -1 / 0) + } + + function m(t, e, n, i, r) { + var o, a, s, c, l, u; + for (o = 0, a = t.length - 3; o <= a; o += 3) + if (Gc.fromArray(t, o), s = r.x * Math.abs(Gc.x) + r.y * Math.abs(Gc.y) + r.z * Math.abs(Gc.z), c = e.dot(Gc), l = n.dot(Gc), u = i.dot(Gc), Math.max(-Math.max(c, l, u), Math.min(c, l, u)) > s) return 0; + return 1 + } + + function g(t, e) { + this.center = void 0 !== t ? t : new i, this.radius = void 0 !== e ? e : 0 + } + + function v(t, e) { + this.origin = void 0 !== t ? t : new i, this.direction = void 0 !== e ? e : new i + } + + function y(t, e, n) { + this.a = void 0 !== t ? t : new i, this.b = void 0 !== e ? e : new i, this.c = void 0 !== n ? n : new i + } + + function x(t, e, n) { + return void 0 === e && void 0 === n ? this.set(t) : this.setRGB(t, e, n) + } + + function b(t, e, n) { + return n < 0 && (n += 1), n > 1 && (n -= 1), n < 1 / 6 ? t + 6 * (e - t) * n : n < .5 ? e : n < 2 / 3 ? t + 6 * (e - t) * (2 / 3 - n) : t + } + + function _(t) { + return t < .04045 ? .0773993808 * t : Math.pow(.9478672986 * t + .0521327014, 2.4) + } + + function w(t) { + return t < .0031308 ? 12.92 * t : 1.055 * Math.pow(t, .41666) - .055 + } + + function M(t, e, n, r, o, a) { + this.a = t, this.b = e, this.c = n, this.normal = r && r.isVector3 ? r : new i, this.vertexNormals = Array.isArray(r) ? r : [], this.color = o && o.isColor ? o : new x, this.vertexColors = Array.isArray(o) ? o : [], this.materialIndex = void 0 !== a ? a : 0 + } + + function S() { + Object.defineProperty(this, "id", { + value: hl++ + }), this.uuid = ic.generateUUID(), this.name = "", this.type = "Material", this.fog = 1, this.blending = Xo, this.side = Uo, this.flatShading = 0, this.vertexTangents = 0, this.vertexColors = Go, this.opacity = 1, this.transparent = 0, this.blendSrc = sa, this.blendDst = ca, this.blendEquation = Qo, this.blendSrcAlpha = null, this.blendDstAlpha = null, this.blendEquationAlpha = null, this.depthFunc = va, this.depthTest = 1, this.depthWrite = 1, this.stencilWriteMask = 255, this.stencilFunc = tc, this.stencilRef = 0, this.stencilFuncMask = 255, this.stencilFail = Ks, this.stencilZFail = Ks, this.stencilZPass = Ks, this.stencilWrite = 0, this.clippingPlanes = null, this.clipIntersection = 0, this.clipShadows = 0, this.shadowSide = null, this.colorWrite = 1, this.precision = null, this.polygonOffset = 0, this.polygonOffsetFactor = 0, this.polygonOffsetUnits = 0, this.dithering = 0, this.alphaTest = 0, this.premultipliedAlpha = 0, this.visible = 1, this.toneMapped = 1, this.userData = {}, this.needsUpdate = 1 + } + + function T(t) { + S.call(this), this.type = "MeshBasicMaterial", this.color = new x(16777215), this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = wa, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = 0, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = 0, this.morphTargets = 0, this.setValues(t) + } + + function A(t, e, n) { + if (Array.isArray(t)) throw new TypeError("THREE.BufferAttribute: array should be a Typed Array."); + this.name = "", this.array = t, this.itemSize = e, this.count = void 0 !== t ? t.length / e : 0, this.normalized = 1 == n, this.dynamic = 0, this.updateRange = { + offset: 0, + count: -1 + }, this.version = 0 + } + + function L(t, e, n) { + A.call(this, new Int8Array(t), e, n) + } + + function C(t, e, n) { + A.call(this, new Uint8Array(t), e, n) + } + + function P(t, e, n) { + A.call(this, new Uint8ClampedArray(t), e, n) + } + + function E(t, e, n) { + A.call(this, new Int16Array(t), e, n) + } + + function N(t, e, n) { + A.call(this, new Uint16Array(t), e, n) + } + + function O(t, e, n) { + A.call(this, new Int32Array(t), e, n) + } + + function D(t, e, n) { + A.call(this, new Uint32Array(t), e, n) + } + + function I(t, e, n) { + A.call(this, new Float32Array(t), e, n) + } + + function z(t, e, n) { + A.call(this, new Float64Array(t), e, n) + } + + function R() { + this.vertices = [], this.normals = [], this.colors = [], this.uvs = [], this.uvs2 = [], this.groups = [], this.morphTargets = {}, this.skinWeights = [], this.skinIndices = [], this.boundingBox = null, this.boundingSphere = null, this.verticesNeedUpdate = 0, this.normalsNeedUpdate = 0, this.colorsNeedUpdate = 0, this.uvsNeedUpdate = 0, this.groupsNeedUpdate = 0 + } + + function F(t) { + var e, n, i; + if (0 === t.length) return -1 / 0; + for (e = t[0], n = 1, i = t.length; n < i; ++n) t[n] > e && (e = t[n]); + return e + } + + function k() { + Object.defineProperty(this, "id", { + value: pl += 2 + }), this.uuid = ic.generateUUID(), this.name = "", this.type = "BufferGeometry", this.index = null, this.attributes = {}, this.morphAttributes = {}, this.groups = [], this.boundingBox = null, this.boundingSphere = null, this.drawRange = { + start: 0, + count: 1 / 0 + }, this.userData = {} + } + + function B(t, e) { + p.call(this), this.type = "Mesh", this.geometry = void 0 !== t ? t : new k, this.material = void 0 !== e ? e : new T({ + color: 16777215 * Math.random() + }), this.drawMode = ks, this.updateMorphTargets() + } + + function U(t, e, n, i, r, o, a, s) { + var c; + return null === (e.side === jo ? i.intersectTriangle(a, o, r, 1, s) : i.intersectTriangle(r, o, a, e.side !== Vo, s)) ? null : (zl.copy(s), zl.applyMatrix4(t.matrixWorld), (c = n.ray.origin.distanceTo(zl)) < n.near || c > n.far ? null : { + distance: c, + point: zl.clone(), + object: t + }) + } + + function j(t, n, i, r, o, a, s, c, l, u, h) { + var p, d, f, m, g, v, x; + if (wl.fromBufferAttribute(o, l), Ml.fromBufferAttribute(o, u), Sl.fromBufferAttribute(o, h), p = t.morphTargetInfluences, n.morphTargets && a && p) { + for (Cl.set(0, 0, 0), Pl.set(0, 0, 0), El.set(0, 0, 0), d = 0, f = a.length; d < f; d++) m = p[d], g = a[d], 0 !== m && (Tl.fromBufferAttribute(g, l), Al.fromBufferAttribute(g, u), Ll.fromBufferAttribute(g, h), Cl.addScaledVector(Tl.sub(wl), m), Pl.addScaledVector(Al.sub(Ml), m), El.addScaledVector(Ll.sub(Sl), m)); + wl.add(Cl), Ml.add(Pl), Sl.add(El) + } + return (v = U(t, n, i, r, wl, Ml, Sl, Il)) && (s && (Nl.fromBufferAttribute(s, l), Ol.fromBufferAttribute(s, u), Dl.fromBufferAttribute(s, h), v.uv = y.getUV(Il, wl, Ml, Sl, Nl, Ol, Dl, new e)), c && (Nl.fromBufferAttribute(c, l), Ol.fromBufferAttribute(c, u), Dl.fromBufferAttribute(c, h), v.uv2 = y.getUV(Il, wl, Ml, Sl, Nl, Ol, Dl, new e)), x = new M(l, u, h), y.getNormal(wl, Ml, Sl, x.normal), v.face = x), v + } + + function V() { + Object.defineProperty(this, "id", { + value: Rl += 2 + }), this.uuid = ic.generateUUID(), this.name = "", this.type = "Geometry", this.vertices = [], this.colors = [], this.faces = [], this.faceVertexUvs = [ + [] + ], this.morphTargets = [], this.morphNormals = [], this.skinWeights = [], this.skinIndices = [], this.lineDistances = [], this.boundingBox = null, this.boundingSphere = null, this.elementsNeedUpdate = 0, this.verticesNeedUpdate = 0, this.uvsNeedUpdate = 0, this.normalsNeedUpdate = 0, this.colorsNeedUpdate = 0, this.lineDistancesNeedUpdate = 0, this.groupsNeedUpdate = 0 + } + + function G(t) { + var e, n, i, r = {}; + for (e in t) + for (n in r[e] = {}, t[e])(i = t[e][n]) && (i.isColor || i.isMatrix3 || i.isMatrix4 || i.isVector2 || i.isVector3 || i.isVector4 || i.isTexture) ? r[e][n] = i.clone() : r[e][n] = Array.isArray(i) ? i.slice() : i; + return r + } + + function W(t) { + var e, n, i, r = {}; + for (e = 0; e < t.length; e++) + for (i in n = G(t[e])) r[i] = n[i]; + return r + } + + function H(t) { + S.call(this), this.type = "ShaderMaterial", this.defines = {}, this.uniforms = {}, this.vertexShader = Ul, this.fragmentShader = jl, this.linewidth = 1, this.wireframe = 0, this.wireframeLinewidth = 1, this.fog = 0, this.lights = 0, this.clipping = 0, this.skinning = 0, this.morphTargets = 0, this.morphNormals = 0, this.extensions = { + derivatives: 0, + fragDepth: 0, + drawBuffers: 0, + shaderTextureLOD: 0 + }, this.defaultAttributeValues = { + color: [1, 1, 1], + uv: [0, 0], + uv2: [0, 0] + }, this.index0AttributeName = void 0, this.uniformsNeedUpdate = 0, void 0 !== t && (t.attributes, this.setValues(t)) + } + + function q() { + p.call(this), this.type = "Camera", this.matrixWorldInverse = new l, this.projectionMatrix = new l, this.projectionMatrixInverse = new l + } + + function X(t, e, n, i) { + q.call(this), this.type = "PerspectiveCamera", this.fov = void 0 !== t ? t : 50, this.zoom = 1, this.near = void 0 !== n ? n : .1, this.far = void 0 !== i ? i : 2e3, this.focus = 10, this.aspect = void 0 !== e ? e : 1, this.view = null, this.filmGauge = 35, this.filmOffset = 0, this.updateProjectionMatrix() + } + + function Y(t, e, n, r) { + var o, a, s, c, l, u; + p.call(this), this.type = "CubeCamera", (o = new X(Vl, Gl, t, e)).up.set(0, -1, 0), o.lookAt(new i(1, 0, 0)), this.add(o), (a = new X(Vl, Gl, t, e)).up.set(0, -1, 0), a.lookAt(new i(-1, 0, 0)), this.add(a), (s = new X(Vl, Gl, t, e)).up.set(0, 0, 1), s.lookAt(new i(0, 1, 0)), this.add(s), (c = new X(Vl, Gl, t, e)).up.set(0, 0, -1), c.lookAt(new i(0, -1, 0)), this.add(c), (l = new X(Vl, Gl, t, e)).up.set(0, -1, 0), l.lookAt(new i(0, 0, 1)), this.add(l), (u = new X(Vl, Gl, t, e)).up.set(0, -1, 0), u.lookAt(new i(0, 0, -1)), this.add(u), r = r || { + format: as, + magFilter: Wa, + minFilter: Wa + }, this.renderTarget = new Z(n, n, r), this.renderTarget.texture.name = "CubeCamera", this.update = function(t, e) { + var n, i, r; + null === this.parent && this.updateMatrixWorld(), n = t.getRenderTarget(), r = (i = this.renderTarget).texture.generateMipmaps, i.texture.generateMipmaps = 0, t.setRenderTarget(i, 0), t.render(e, o), t.setRenderTarget(i, 1), t.render(e, a), t.setRenderTarget(i, 2), t.render(e, s), t.setRenderTarget(i, 3), t.render(e, c), t.setRenderTarget(i, 4), t.render(e, l), i.texture.generateMipmaps = r, t.setRenderTarget(i, 5), t.render(e, u), t.setRenderTarget(n) + }, this.clear = function(t, e, n, i) { + var r, o = t.getRenderTarget(), + a = this.renderTarget; + for (r = 0; r < 6; r++) t.setRenderTarget(a, r), t.clear(e, n, i); + t.setRenderTarget(o) + } + } + + function Z(t, e, n) { + s.call(this, t, e, n) + } + + function J(t, e, n, i, r, a, s, c, l, u, h, p) { + o.call(this, null, a, s, c, l, u, i, r, h, p), this.image = { + data: t || null, + width: e || 1, + height: n || 1 + }, this.magFilter = void 0 !== l ? l : ja, this.minFilter = void 0 !== u ? u : ja, this.generateMipmaps = 0, this.flipY = 0, this.unpackAlignment = 1, this.needsUpdate = 1 + } + + function $(t, e) { + this.normal = void 0 !== t ? t : new i(1, 0, 0), this.constant = void 0 !== e ? e : 0 + } + + function Q(t, e, n, i, r, o) { + this.planes = [void 0 !== t ? t : new $, void 0 !== e ? e : new $, void 0 !== n ? n : new $, void 0 !== i ? i : new $, void 0 !== r ? r : new $, void 0 !== o ? o : new $] + } + + function K() { + function t(r, o) { + 0 != n && (i(r, o), e.requestAnimationFrame(t)) + } + var e = null, + n = 0, + i = null; + return { + start: function() { + 1 != n && null !== i && (e.requestAnimationFrame(t), n = 1) + }, + stop: function() { + n = 0 + }, + setAnimationLoop: function(t) { + i = t + }, + setContext: function(t) { + e = t + } + } + } + + function tt(t) { + var e = new WeakMap; + return { + get: function(t) { + return t.isInterleavedBufferAttribute && (t = t.data), e.get(t) + }, + remove: function(n) { + n.isInterleavedBufferAttribute && (n = n.data); + var i = e.get(n); + i && (t.deleteBuffer(i.buffer), e.delete(n)) + }, + update: function(n, i) { + n.isInterleavedBufferAttribute && (n = n.data); + var r = e.get(n); + void 0 === r ? e.set(n, function(e, n) { + var i, r = e.array, + o = e.dynamic ? 35048 : 35044, + a = t.createBuffer(); + return t.bindBuffer(n, a), t.bufferData(n, r, o), e.onUploadCallback(), i = 5126, r instanceof Float32Array ? i = 5126 : r instanceof Float64Array || (r instanceof Uint16Array ? i = 5123 : r instanceof Int16Array ? i = 5122 : r instanceof Uint32Array ? i = 5125 : r instanceof Int32Array ? i = 5124 : r instanceof Int8Array ? i = 5120 : r instanceof Uint8Array && (i = 5121)), { + buffer: a, + type: i, + bytesPerElement: r.BYTES_PER_ELEMENT, + version: e.version + } + }(n, i)) : r.version < n.version && (function(e, n, i) { + var r = n.array, + o = n.updateRange; + t.bindBuffer(i, e), 0 == n.dynamic ? t.bufferData(i, r, 35044) : -1 === o.count ? t.bufferSubData(i, 0, r) : 0 === o.count || (t.bufferSubData(i, o.offset * r.BYTES_PER_ELEMENT, r.subarray(o.offset, o.offset + o.count)), o.count = -1) + }(r.buffer, n, i), r.version = n.version) + } + } + } + + function et(t, e, n, i) { + V.call(this), this.type = "PlaneGeometry", this.parameters = { + width: t, + height: e, + widthSegments: n, + heightSegments: i + }, this.fromBufferGeometry(new nt(t, e, n, i)), this.mergeVertices() + } + + function nt(t, e, n, i) { + var r, o, a, s, c, l, u, h, p, d, f, m, g, v, y, x, b, _, w, M; + for (k.call(this), this.type = "PlaneBufferGeometry", this.parameters = { + width: t, + height: e, + widthSegments: n, + heightSegments: i + }, r = (t = t || 1) / 2, o = (e = e || 1) / 2, c = (a = Math.floor(n) || 1) + 1, l = (s = Math.floor(i) || 1) + 1, u = t / a, h = e / s, f = [], m = [], g = [], v = [], d = 0; d < l; d++) + for (y = d * h - o, p = 0; p < c; p++) x = p * u - r, m.push(x, -y, 0), g.push(0, 0, 1), v.push(p / a), v.push(1 - d / s); + for (d = 0; d < s; d++) + for (p = 0; p < a; p++) b = p + c * d, _ = p + c * (d + 1), w = p + 1 + c * (d + 1), M = p + 1 + c * d, f.push(b, _, M), f.push(_, w, M); + this.setIndex(f), this.addAttribute("position", new I(m, 3)), this.addAttribute("normal", new I(g, 3)), this.addAttribute("uv", new I(v, 2)) + } + + function it(t, e, n, i) { + function r(t, n) { + e.buffers.color.setClear(t.r, t.g, t.b, n, i) + } + var o, a, s = new x(0), + c = 0, + l = null, + u = 0; + return { + getClearColor: function() { + return s + }, + setClearColor: function(t, e) { + s.set(t), r(s, c = void 0 !== e ? e : 1) + }, + getClearAlpha: function() { + return c + }, + setClearAlpha: function(t) { + r(s, c = t) + }, + render: function(e, i, h, p) { + var d, f = i.background, + m = t.vr, + g = m.getSession && m.getSession(); + g && "additive" === g.environmentBlendMode && (f = null), null === f ? (r(s, c), l = null, u = 0) : f && f.isColor && (r(f, 1), p = 1, l = null, u = 0), (t.autoClear || p) && t.clear(t.autoClearColor, t.autoClearDepth, t.autoClearStencil), f && (f.isCubeTexture || f.isWebGLRenderTargetCube) ? (void 0 === a && ((a = new B(new up(1, 1, 1), new H({ + type: "BackgroundCubeMaterial", + uniforms: G($l.cube.uniforms), + vertexShader: $l.cube.vertexShader, + fragmentShader: $l.cube.fragmentShader, + side: jo, + depthTest: 0, + depthWrite: 0, + fog: 0 + }))).geometry.removeAttribute("normal"), a.geometry.removeAttribute("uv"), a.onBeforeRender = function(t, e, n) { + this.matrixWorld.copyPosition(n.matrixWorld) + }, Object.defineProperty(a.material, "map", { + get: function() { + return this.uniforms.tCube.value + } + }), n.update(a)), d = f.isWebGLRenderTargetCube ? f.texture : f, a.material.uniforms.tCube.value = d, a.material.uniforms.tFlip.value = f.isWebGLRenderTargetCube ? 1 : -1, l === f && u === d.version || (a.material.needsUpdate = 1, l = f, u = d.version), e.unshift(a, a.geometry, a.material, 0, 0, null)) : f && f.isTexture && (void 0 === o && ((o = new B(new nt(2, 2), new H({ + type: "BackgroundMaterial", + uniforms: G($l.background.uniforms), + vertexShader: $l.background.vertexShader, + fragmentShader: $l.background.fragmentShader, + side: Uo, + depthTest: 0, + depthWrite: 0, + fog: 0 + }))).geometry.removeAttribute("normal"), Object.defineProperty(o.material, "map", { + get: function() { + return this.uniforms.t2D.value + } + }), n.update(o)), o.material.uniforms.t2D.value = f, 1 == f.matrixAutoUpdate && f.updateMatrix(), o.material.uniforms.uvTransform.value.copy(f.matrix), l === f && u === f.version || (o.material.needsUpdate = 1, l = f, u = f.version), e.unshift(o, o.geometry, o.material, 0, 0, null)) + } + } + } + + function rt(t, e, n, i) { + var r; + this.setMode = function(t) { + r = t + }, this.render = function(e, i) { + t.drawArrays(r, e, i), n.update(i, r) + }, this.renderInstances = function(o, a, s, c) { + if (0 !== c) { + var l, u; + if (i.isWebGL2) l = t, u = "drawArraysInstanced"; + else if (u = "drawArraysInstancedANGLE", null === (l = e.get("ANGLE_instanced_arrays"))) return; + l[u](r, a, s, c), n.update(s, r, c) + } + } + } + + function ot(t, e, n) { + function i(e) { + if ("highp" === e) { + if (t.getShaderPrecisionFormat(35633, 36338).precision > 0 && t.getShaderPrecisionFormat(35632, 36338).precision > 0) return "highp"; + e = "mediump" + } + return "mediump" === e && t.getShaderPrecisionFormat(35633, 36337).precision > 0 && t.getShaderPrecisionFormat(35632, 36337).precision > 0 ? "mediump" : "lowp" + } + var r, o, a, s, c = "undefined" != typeof WebGL2RenderingContext && t instanceof WebGL2RenderingContext, + l = void 0 !== n.precision ? n.precision : "highp", + u = i(l); + return u !== l && (l = u), { + isWebGL2: c, + getMaxAnisotropy: function() { + if (void 0 !== r) return r; + var n = e.get("EXT_texture_filter_anisotropic"); + return r = null !== n ? t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 0 + }, + getMaxPrecision: i, + precision: l, + logarithmicDepthBuffer: 1 == n.logarithmicDepthBuffer, + maxTextures: t.getParameter(34930), + maxVertexTextures: o = t.getParameter(35660), + maxTextureSize: t.getParameter(3379), + maxCubemapSize: t.getParameter(34076), + maxAttributes: t.getParameter(34921), + maxVertexUniforms: t.getParameter(36347), + maxVaryings: t.getParameter(36348), + maxFragmentUniforms: t.getParameter(36349), + vertexTextures: a = o > 0, + floatFragmentTextures: s = c || !!e.get("OES_texture_float"), + floatVertexTextures: a && s, + maxSamples: c ? t.getParameter(36183) : 0 + } + } + + function at() { + function t() { + u.value !== i && (u.value = i, u.needsUpdate = o > 0), n.numPlanes = o, n.numIntersection = 0 + } + + function e(t, e, i, r) { + var o, a, s, h, p = null !== t ? t.length : 0, + d = null; + if (0 !== p) { + if (d = u.value, 1 != r || null === d) + for (o = i + 4 * p, a = e.matrixWorldInverse, l.getNormalMatrix(a), (null === d || d.length < o) && (d = new Float32Array(o)), s = 0, h = i; s !== p; ++s, h += 4) c.copy(t[s]).applyMatrix4(a, l), c.normal.toArray(d, h), d[h + 3] = c.constant; + u.value = d, u.needsUpdate = 1 + } + return n.numPlanes = p, d + } + var n = this, + i = null, + o = 0, + a = 0, + s = 0, + c = new $, + l = new r, + u = { + value: null, + needsUpdate: 0 + }; + this.uniform = u, this.numPlanes = 0, this.numIntersection = 0, this.init = function(t, n, r) { + var s = 0 !== t.length || n || 0 !== o || a; + return a = n, i = e(t, r, 0), o = t.length, s + }, this.beginShadows = function() { + s = 1, e(null) + }, this.endShadows = function() { + s = 0, t() + }, this.setState = function(n, r, c, l, h, p) { + var d, f, m, g; + if (!a || null === n || 0 === n.length || s && !c) s ? e(null) : t(); + else { + for (f = 4 * (d = s ? 0 : o), m = h.clippingState || null, u.value = m, m = e(n, l, f, p), g = 0; g !== f; ++g) m[g] = i[g]; + h.clippingState = m, this.numIntersection = r ? this.numPlanes : 0, this.numPlanes += d + } + } + } + + function st(t) { + var e = {}; + return { + get: function(n) { + if (void 0 !== e[n]) return e[n]; + var i; + switch (n) { + case "WEBGL_depth_texture": + i = t.getExtension("WEBGL_depth_texture") || t.getExtension("MOZ_WEBGL_depth_texture") || t.getExtension("WEBKIT_WEBGL_depth_texture"); + break; + case "EXT_texture_filter_anisotropic": + i = t.getExtension("EXT_texture_filter_anisotropic") || t.getExtension("MOZ_EXT_texture_filter_anisotropic") || t.getExtension("WEBKIT_EXT_texture_filter_anisotropic"); + break; + case "WEBGL_compressed_texture_s3tc": + i = t.getExtension("WEBGL_compressed_texture_s3tc") || t.getExtension("MOZ_WEBGL_compressed_texture_s3tc") || t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); + break; + case "WEBGL_compressed_texture_pvrtc": + i = t.getExtension("WEBGL_compressed_texture_pvrtc") || t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"); + break; + default: + i = t.getExtension(n) + } + return e[n] = i, i + } + } + } + + function ct(t, e, n) { + function i(t) { + var r, s, c = t.target, + l = o.get(c); + for (r in null !== l.index && e.remove(l.index), l.attributes) e.remove(l.attributes[r]); + c.removeEventListener("dispose", i), o.delete(c), (s = a.get(l)) && (e.remove(s), a.delete(l)), n.memory.geometries-- + } + + function r(t) { + var n, i, r, o, s, c, l, u, h = [], + p = t.index, + d = t.attributes.position, + f = 0; + if (null !== p) + for (n = p.array, f = p.version, i = 0, r = n.length; i < r; i += 3) o = n[i + 0], s = n[i + 1], c = n[i + 2], h.push(o, s, s, c, c, o); + else + for (n = d.array, f = d.version, i = 0, r = n.length / 3 - 1; i < r; i += 3) o = i + 0, s = i + 1, c = i + 2, h.push(o, s, s, c, c, o); + (l = new(F(h) > 65535 ? D : N)(h, 1)).version = f, e.update(l, 34963), (u = a.get(t)) && e.remove(u), a.set(t, l) + } + var o = new WeakMap, + a = new WeakMap; + return { + get: function(t, e) { + var r = o.get(e); + return r || (e.addEventListener("dispose", i), e.isBufferGeometry ? r = e : e.isGeometry && (void 0 === e._bufferGeometry && (e._bufferGeometry = (new k).setFromObject(t)), r = e._bufferGeometry), o.set(e, r), n.memory.geometries++, r) + }, + update: function(t) { + var n, i, r, o, a, s = t.index, + c = t.attributes; + for (n in null !== s && e.update(s, 34963), c) e.update(c[n], 34962); + for (n in i = t.morphAttributes) + for (o = 0, a = (r = i[n]).length; o < a; o++) e.update(r[o], 34962) + }, + getWireframeAttribute: function(t) { + var e, n = a.get(t); + return n ? null !== (e = t.index) && n.version < e.version && r(t) : r(t), a.get(t) + } + } + } + + function lt(t, e, n, i) { + var r, o, a; + this.setMode = function(t) { + r = t + }, this.setIndex = function(t) { + o = t.type, a = t.bytesPerElement + }, this.render = function(e, i) { + t.drawElements(r, i, o, e * a), n.update(i, r) + }, this.renderInstances = function(s, c, l, u) { + if (0 !== u) { + var h, p; + if (i.isWebGL2) h = t, p = "drawElementsInstanced"; + else if (p = "drawElementsInstancedANGLE", null === (h = e.get("ANGLE_instanced_arrays"))) return; + h[p](r, l, o, c * a, u), n.update(l, r, u) + } + } + } + + function ut() { + var t = { + frame: 0, + calls: 0, + triangles: 0, + points: 0, + lines: 0 + }; + return { + memory: { + geometries: 0, + textures: 0 + }, + render: t, + programs: null, + autoReset: 1, + reset: function() { + t.frame++, t.calls = 0, t.triangles = 0, t.points = 0, t.lines = 0 + }, + update: function(e, n, i) { + switch (i = i || 1, t.calls++, n) { + case 4: + t.triangles += i * (e / 3); + break; + case 5: + case 6: + t.triangles += i * (e - 2); + break; + case 1: + t.lines += i * (e / 2); + break; + case 3: + t.lines += i * (e - 1); + break; + case 2: + t.lines += i * e; + break; + case 0: + t.points += i * e + } + } + } + } + + function ht(t, e) { + return Math.abs(e[1]) - Math.abs(t[1]) + } + + function pt(t) { + var e = {}, + n = new Float32Array(8); + return { + update: function(i, r, o, a) { + var s, c, l, u, h, p, d = i.morphTargetInfluences, + f = d.length, + m = e[r.id]; + if (void 0 === m) { + for (m = [], s = 0; s < f; s++) m[s] = [s, 0]; + e[r.id] = m + } + for (c = o.morphTargets && r.morphAttributes.position, l = o.morphNormals && r.morphAttributes.normal, s = 0; s < f; s++) 0 !== (u = m[s])[1] && (c && r.removeAttribute("morphTarget" + s), l && r.removeAttribute("morphNormal" + s)); + for (s = 0; s < f; s++)(u = m[s])[0] = s, u[1] = d[s]; + for (m.sort(ht), s = 0; s < 8; s++)(u = m[s]) && (h = u[0], p = u[1]) ? (c && r.addAttribute("morphTarget" + s, c[h]), l && r.addAttribute("morphNormal" + s, l[h]), n[s] = p) : n[s] = 0; + a.getUniforms().setValue(t, "morphTargetInfluences", n) + } + } + } + + function dt(t, e, n, i) { + var r = {}; + return { + update: function(t) { + var o = i.render.frame, + a = t.geometry, + s = e.get(t, a); + return r[s.id] !== o && (a.isGeometry && s.updateFromObject(t), e.update(s), r[s.id] = o), t.isInstancedMesh && n.update(t.instanceMatrix, 34962), s + }, + dispose: function() { + r = {} + } + } + } + + function ft(t, e, n, i, r, a, s, c, l, u) { + t = void 0 !== t ? t : [], e = void 0 !== e ? e : Na, s = void 0 !== s ? s : as, o.call(this, t, e, n, i, r, a, s, c, l, u), this.flipY = 0 + } + + function mt(t, e, n, i) { + o.call(this, null), this.image = { + data: t || null, + width: e || 1, + height: n || 1, + depth: i || 1 + }, this.magFilter = ja, this.minFilter = ja, this.wrapR = Ba, this.generateMipmaps = 0, this.flipY = 0, this.needsUpdate = 1 + } + + function gt(t, e, n, i) { + o.call(this, null), this.image = { + data: t || null, + width: e || 1, + height: n || 1, + depth: i || 1 + }, this.magFilter = ja, this.minFilter = ja, this.wrapR = Ba, this.generateMipmaps = 0, this.flipY = 0, this.needsUpdate = 1 + } + + function vt(t, e, n) { + var i, r, o, a, s = t[0]; + if (s <= 0 || s > 0) return t; + if (void 0 === (r = nu[i = e * n]) && (r = new Float32Array(i), nu[i] = r), 0 !== e) + for (s.toArray(r, 0), o = 1, a = 0; o !== e; ++o) a += n, t[o].toArray(r, a); + return r + } + + function yt(t, e) { + if (t.length !== e.length) return 0; + for (var n = 0, i = t.length; n < i; n++) + if (t[n] !== e[n]) return 0; + return 1 + } + + function xt(t, e) { + for (var n = 0, i = e.length; n < i; n++) t[n] = e[n] + } + + function bt(t, e) { + var n, i = iu[e]; + for (void 0 === i && (i = new Int32Array(e), iu[e] = i), n = 0; n !== e; ++n) i[n] = t.allocateTextureUnit(); + return i + } + + function _t(t, e) { + var n = this.cache; + n[0] !== e && (t.uniform1f(this.addr, e), n[0] = e) + } + + function wt(t, e) { + var n = this.cache; + if (void 0 !== e.x) n[0] === e.x && n[1] === e.y || (t.uniform2f(this.addr, e.x, e.y), n[0] = e.x, n[1] = e.y); + else { + if (yt(n, e)) return; + t.uniform2fv(this.addr, e), xt(n, e) + } + } + + function Mt(t, e) { + var n = this.cache; + if (void 0 !== e.x) n[0] === e.x && n[1] === e.y && n[2] === e.z || (t.uniform3f(this.addr, e.x, e.y, e.z), n[0] = e.x, n[1] = e.y, n[2] = e.z); + else if (void 0 !== e.r) n[0] === e.r && n[1] === e.g && n[2] === e.b || (t.uniform3f(this.addr, e.r, e.g, e.b), n[0] = e.r, n[1] = e.g, n[2] = e.b); + else { + if (yt(n, e)) return; + t.uniform3fv(this.addr, e), xt(n, e) + } + } + + function St(t, e) { + var n = this.cache; + if (void 0 !== e.x) n[0] === e.x && n[1] === e.y && n[2] === e.z && n[3] === e.w || (t.uniform4f(this.addr, e.x, e.y, e.z, e.w), n[0] = e.x, n[1] = e.y, n[2] = e.z, n[3] = e.w); + else { + if (yt(n, e)) return; + t.uniform4fv(this.addr, e), xt(n, e) + } + } + + function Tt(t, e) { + var n = this.cache, + i = e.elements; + if (void 0 === i) { + if (yt(n, e)) return; + t.uniformMatrix2fv(this.addr, 0, e), xt(n, e) + } else { + if (yt(n, i)) return; + au.set(i), t.uniformMatrix2fv(this.addr, 0, au), xt(n, i) + } + } + + function At(t, e) { + var n = this.cache, + i = e.elements; + if (void 0 === i) { + if (yt(n, e)) return; + t.uniformMatrix3fv(this.addr, 0, e), xt(n, e) + } else { + if (yt(n, i)) return; + ou.set(i), t.uniformMatrix3fv(this.addr, 0, ou), xt(n, i) + } + } + + function Lt(t, e) { + var n = this.cache, + i = e.elements; + if (void 0 === i) { + if (yt(n, e)) return; + t.uniformMatrix4fv(this.addr, 0, e), xt(n, e) + } else { + if (yt(n, i)) return; + ru.set(i), t.uniformMatrix4fv(this.addr, 0, ru), xt(n, i) + } + } + + function Ct(t, e, n) { + var i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.safeSetTexture2D(e || Ql, r) + } + + function Pt(t, e, n) { + var i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.setTexture2DArray(e || Kl, r) + } + + function Et(t, e, n) { + var i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.setTexture3D(e || tu, r) + } + + function Nt(t, e, n) { + var i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.safeSetTextureCube(e || eu, r) + } + + function Ot(t, e) { + var n = this.cache; + n[0] !== e && (t.uniform1i(this.addr, e), n[0] = e) + } + + function Dt(t, e) { + var n = this.cache; + yt(n, e) || (t.uniform2iv(this.addr, e), xt(n, e)) + } + + function It(t, e) { + var n = this.cache; + yt(n, e) || (t.uniform3iv(this.addr, e), xt(n, e)) + } + + function zt(t, e) { + var n = this.cache; + yt(n, e) || (t.uniform4iv(this.addr, e), xt(n, e)) + } + + function Rt(t, e) { + t.uniform1fv(this.addr, e) + } + + function Ft(t, e) { + t.uniform1iv(this.addr, e) + } + + function kt(t, e) { + t.uniform2iv(this.addr, e) + } + + function Bt(t, e) { + t.uniform3iv(this.addr, e) + } + + function Ut(t, e) { + t.uniform4iv(this.addr, e) + } + + function jt(t, e) { + var n = vt(e, this.size, 2); + t.uniform2fv(this.addr, n) + } + + function Vt(t, e) { + var n = vt(e, this.size, 3); + t.uniform3fv(this.addr, n) + } + + function Gt(t, e) { + var n = vt(e, this.size, 4); + t.uniform4fv(this.addr, n) + } + + function Wt(t, e) { + var n = vt(e, this.size, 4); + t.uniformMatrix2fv(this.addr, 0, n) + } + + function Ht(t, e) { + var n = vt(e, this.size, 9); + t.uniformMatrix3fv(this.addr, 0, n) + } + + function qt(t, e) { + var n = vt(e, this.size, 16); + t.uniformMatrix4fv(this.addr, 0, n) + } + + function Xt(t, e, n) { + var i, r = e.length, + o = bt(n, r); + for (t.uniform1iv(this.addr, o), i = 0; i !== r; ++i) n.safeSetTexture2D(e[i] || Ql, o[i]) + } + + function Yt(t, e, n) { + var i, r = e.length, + o = bt(n, r); + for (t.uniform1iv(this.addr, o), i = 0; i !== r; ++i) n.safeSetTextureCube(e[i] || eu, o[i]) + } + + function Zt(t, e, n) { + this.id = t, this.addr = n, this.cache = [], this.setValue = function() { + switch (e.type) { + case 5126: + return _t; + case 35664: + return wt; + case 35665: + return Mt; + case 35666: + return St; + case 35674: + return Tt; + case 35675: + return At; + case 35676: + return Lt; + case 35678: + case 36198: + return Ct; + case 35679: + return Et; + case 35680: + return Nt; + case 36289: + return Pt; + case 5124: + case 35670: + return Ot; + case 35667: + case 35671: + return Dt; + case 35668: + case 35672: + return It; + case 35669: + case 35673: + return zt + } + }() + } + + function Jt(t, e, n) { + this.id = t, this.addr = n, this.cache = [], this.size = e.size, this.setValue = function() { + switch (e.type) { + case 5126: + return Rt; + case 35664: + return jt; + case 35665: + return Vt; + case 35666: + return Gt; + case 35674: + return Wt; + case 35675: + return Ht; + case 35676: + return qt; + case 35678: + return Xt; + case 35680: + return Yt; + case 5124: + case 35670: + return Ft; + case 35667: + case 35671: + return kt; + case 35668: + case 35672: + return Bt; + case 35669: + case 35673: + return Ut + } + }() + } + + function $t(t) { + this.id = t, this.seq = [], this.map = {} + } + + function Qt(t, e) { + t.seq.push(e), t.map[e.id] = e + } + + function Kt(t, e, n) { + var i, r, o, a, s, c = t.name, + l = c.length; + for (su.lastIndex = 0;;) { + if (i = su.exec(c), r = su.lastIndex, o = i[1], "]" === i[2] && (o |= 0), void 0 === (a = i[3]) || "[" === a && r + 2 === l) { + Qt(n, void 0 === a ? new Zt(o, t, e) : new Jt(o, t, e)); + break + } + void 0 === (s = n.map[o]) && Qt(n, s = new $t(o)), n = s + } + } + + function te(t, e) { + var n, i, r; + for (this.seq = [], this.map = {}, n = t.getProgramParameter(e, 35718), i = 0; i < n; ++i) Kt(r = t.getActiveUniform(e, i), t.getUniformLocation(e, r.name), this) + } + + function ee(t, e, n) { + var i = t.createShader(e); + return t.shaderSource(i, n), t.compileShader(i), i + } + + function ne(t) { + switch (t) { + case js: + return ["Linear", "( value )"]; + case Vs: + return ["sRGB", "( value )"]; + case Ws: + return ["RGBE", "( value )"]; + case qs: + return ["RGBM", "( value, 7.0 )"]; + case Xs: + return ["RGBM", "( value, 16.0 )"]; + case Ys: + return ["RGBD", "( value, 256.0 )"]; + case Gs: + return ["Gamma", "( value, float( GAMMA_FACTOR ) )"]; + case Hs: + return ["LogLuv", "( value )"]; + default: + throw Error("unsupported encoding: " + t) + } + } + + function ie(t, e, n) { + var i = t.getShaderParameter(e, 35713), + r = t.getShaderInfoLog(e).trim(); + return i && "" === r ? "" : "THREE.WebGLShader: gl.getShaderInfoLog() " + n + "\n" + r + function() { + var n, i = t.getShaderSource(e).split("\n"); + for (n = 0; n < i.length; n++) i[n] = n + 1 + ": " + i[n]; + return i.join("\n") + }() + } + + function re(t, e) { + var n = ne(e); + return "vec4 " + t + "( vec4 value ) { return " + n[0] + "ToLinear" + n[1] + "; }" + } + + function oe(t, e) { + var n; + switch (e) { + case Aa: + n = "Linear"; + break; + case La: + n = "Reinhard"; + break; + case Ca: + n = "Uncharted2"; + break; + case Pa: + n = "OptimizedCineon"; + break; + case Ea: + n = "ACESFilmic"; + break; + default: + throw Error("unsupported toneMapping: " + e) + } + return "vec3 " + t + "( vec3 color ) { return " + n + "ToneMapping( color ); }" + } + + function ae(t) { + return "" !== t + } + + function se(t, e) { + return t.replace(/NUM_DIR_LIGHTS/g, e.numDirLights).replace(/NUM_SPOT_LIGHTS/g, e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g, e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g, e.numPointLights).replace(/NUM_HEMI_LIGHTS/g, e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g, e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g, e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g, e.numPointLightShadows) + } + + function ce(t, e) { + return t.replace(/NUM_CLIPPING_PLANES/g, e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g, e.numClippingPlanes - e.numClipIntersection) + } + + function le(t) { + return t.replace(lu, ue) + } + + function ue(t, e) { + var n = Zl[e]; + if (void 0 === n) throw Error("Can not resolve #include <" + e + ">"); + return le(n) + } + + function he(t) { + return t.replace(uu, pe) + } + + function pe(t, e, n, i) { + var r, o = ""; + for (r = parseInt(e); r < parseInt(n); r++) o += i.replace(/\[ i \]/g, "[ " + r + " ]").replace(/UNROLLED_LOOP_INDEX/g, r); + return o + } + + function de(t) { + var e = "precision " + t.precision + " float;\nprecision " + t.precision + " int;"; + return "highp" === t.precision ? e += "\n#define HIGH_PRECISION" : "mediump" === t.precision ? e += "\n#define MEDIUM_PRECISION" : "lowp" === t.precision && (e += "\n#define LOW_PRECISION"), e + } + + function fe(t, e, n, i, r, o) { + var a, s, c, l, u, h, p, d, f, m, g, v, y, x, b, _, w = t.getContext(), + M = i.defines, + S = r.vertexShader, + T = r.fragmentShader, + A = function(t) { + var e = "SHADOWMAP_TYPE_BASIC"; + return t.shadowMapType === Fo ? e = "SHADOWMAP_TYPE_PCF" : t.shadowMapType === ko ? e = "SHADOWMAP_TYPE_PCF_SOFT" : t.shadowMapType === Bo && (e = "SHADOWMAP_TYPE_VSM"), e + }(o), + L = function(t, e) { + var n = "ENVMAP_TYPE_CUBE"; + if (t.envMap) switch (e.envMap.mapping) { + case Na: + case Oa: + n = "ENVMAP_TYPE_CUBE"; + break; + case Ra: + case Fa: + n = "ENVMAP_TYPE_CUBE_UV"; + break; + case Da: + case Ia: + n = "ENVMAP_TYPE_EQUIREC"; + break; + case za: + n = "ENVMAP_TYPE_SPHERE" + } + return n + }(o, i), + C = function(t, e) { + var n = "ENVMAP_MODE_REFLECTION"; + if (t.envMap) switch (e.envMap.mapping) { + case Oa: + case Ia: + n = "ENVMAP_MODE_REFRACTION" + } + return n + }(o, i), + P = function(t, e) { + var n = "ENVMAP_BLENDING_MULTIPLY"; + if (t.envMap) switch (e.combine) { + case wa: + n = "ENVMAP_BLENDING_MULTIPLY"; + break; + case Ma: + n = "ENVMAP_BLENDING_MIX"; + break; + case Sa: + n = "ENVMAP_BLENDING_ADD" + } + return n + }(o, i), + E = t.gammaFactor > 0 ? t.gammaFactor : 1, + N = o.isWebGL2 ? "" : function(t, e, n) { + return [(t = t || {}).derivatives || e.envMapCubeUV || e.bumpMap || e.tangentSpaceNormalMap || e.clearcoatNormalMap || e.flatShading ? "#extension GL_OES_standard_derivatives : enable" : "", (t.fragDepth || e.logarithmicDepthBuffer) && n.get("EXT_frag_depth") ? "#extension GL_EXT_frag_depth : enable" : "", t.drawBuffers && n.get("WEBGL_draw_buffers") ? "#extension GL_EXT_draw_buffers : require" : "", (t.shaderTextureLOD || e.envMap) && n.get("EXT_shader_texture_lod") ? "#extension GL_EXT_shader_texture_lod : enable" : ""].filter(ae).join("\n") + }(i.extensions, o, e), + O = function(t) { + var e, n, i = []; + for (e in t) 0 != (n = t[e]) && i.push("#define " + e + " " + n); + return i.join("\n") + }(M), + D = w.createProgram(), + I = t.getRenderTarget(), + z = I && I.isWebGLMultiviewRenderTarget ? I.numViews : 0; + return i.isRawShaderMaterial ? ((a = [O].filter(ae).join("\n")).length > 0 && (a += "\n"), (s = [N, O].filter(ae).join("\n")).length > 0 && (s += "\n")) : (a = [de(o), "#define SHADER_NAME " + r.name, O, o.instancing ? "#define USE_INSTANCING" : "", o.supportsVertexTextures ? "#define VERTEX_TEXTURES" : "", "#define GAMMA_FACTOR " + E, "#define MAX_BONES " + o.maxBones, o.useFog && o.fog ? "#define USE_FOG" : "", o.useFog && o.fogExp2 ? "#define FOG_EXP2" : "", o.map ? "#define USE_MAP" : "", o.envMap ? "#define USE_ENVMAP" : "", o.envMap ? "#define " + C : "", o.lightMap ? "#define USE_LIGHTMAP" : "", o.aoMap ? "#define USE_AOMAP" : "", o.emissiveMap ? "#define USE_EMISSIVEMAP" : "", o.bumpMap ? "#define USE_BUMPMAP" : "", o.normalMap ? "#define USE_NORMALMAP" : "", o.normalMap && o.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", o.normalMap && o.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", o.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", o.displacementMap && o.supportsVertexTextures ? "#define USE_DISPLACEMENTMAP" : "", o.specularMap ? "#define USE_SPECULARMAP" : "", o.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", o.metalnessMap ? "#define USE_METALNESSMAP" : "", o.alphaMap ? "#define USE_ALPHAMAP" : "", o.vertexTangents ? "#define USE_TANGENT" : "", o.vertexColors ? "#define USE_COLOR" : "", o.vertexUvs ? "#define USE_UV" : "", o.flatShading ? "#define FLAT_SHADED" : "", o.skinning ? "#define USE_SKINNING" : "", o.useVertexTexture ? "#define BONE_TEXTURE" : "", o.morphTargets ? "#define USE_MORPHTARGETS" : "", o.morphNormals && 0 == o.flatShading ? "#define USE_MORPHNORMALS" : "", o.doubleSided ? "#define DOUBLE_SIDED" : "", o.flipSided ? "#define FLIP_SIDED" : "", o.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", o.shadowMapEnabled ? "#define " + A : "", o.sizeAttenuation ? "#define USE_SIZEATTENUATION" : "", o.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", o.logarithmicDepthBuffer && (o.isWebGL2 || e.get("EXT_frag_depth")) ? "#define USE_LOGDEPTHBUF_EXT" : "", "uniform mat4 modelMatrix;", "uniform mat4 modelViewMatrix;", "uniform mat4 projectionMatrix;", "uniform mat4 viewMatrix;", "uniform mat3 normalMatrix;", "uniform vec3 cameraPosition;", "#ifdef USE_INSTANCING", " attribute mat4 instanceMatrix;", "#endif", "attribute vec3 position;", "attribute vec3 normal;", "attribute vec2 uv;", "#ifdef USE_TANGENT", "\tattribute vec4 tangent;", "#endif", "#ifdef USE_COLOR", "\tattribute vec3 color;", "#endif", "#ifdef USE_MORPHTARGETS", "\tattribute vec3 morphTarget0;", "\tattribute vec3 morphTarget1;", "\tattribute vec3 morphTarget2;", "\tattribute vec3 morphTarget3;", "\t#ifdef USE_MORPHNORMALS", "\t\tattribute vec3 morphNormal0;", "\t\tattribute vec3 morphNormal1;", "\t\tattribute vec3 morphNormal2;", "\t\tattribute vec3 morphNormal3;", "\t#else", "\t\tattribute vec3 morphTarget4;", "\t\tattribute vec3 morphTarget5;", "\t\tattribute vec3 morphTarget6;", "\t\tattribute vec3 morphTarget7;", "\t#endif", "#endif", "#ifdef USE_SKINNING", "\tattribute vec4 skinIndex;", "\tattribute vec4 skinWeight;", "#endif", "\n"].filter(ae).join("\n"), s = [N, de(o), "#define SHADER_NAME " + r.name, O, o.alphaTest ? "#define ALPHATEST " + o.alphaTest + (o.alphaTest % 1 ? "" : ".0") : "", "#define GAMMA_FACTOR " + E, o.useFog && o.fog ? "#define USE_FOG" : "", o.useFog && o.fogExp2 ? "#define FOG_EXP2" : "", o.map ? "#define USE_MAP" : "", o.matcap ? "#define USE_MATCAP" : "", o.envMap ? "#define USE_ENVMAP" : "", o.envMap ? "#define " + L : "", o.envMap ? "#define " + C : "", o.envMap ? "#define " + P : "", o.lightMap ? "#define USE_LIGHTMAP" : "", o.aoMap ? "#define USE_AOMAP" : "", o.emissiveMap ? "#define USE_EMISSIVEMAP" : "", o.bumpMap ? "#define USE_BUMPMAP" : "", o.normalMap ? "#define USE_NORMALMAP" : "", o.normalMap && o.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", o.normalMap && o.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", o.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", o.specularMap ? "#define USE_SPECULARMAP" : "", o.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", o.metalnessMap ? "#define USE_METALNESSMAP" : "", o.alphaMap ? "#define USE_ALPHAMAP" : "", o.sheen ? "#define USE_SHEEN" : "", o.vertexTangents ? "#define USE_TANGENT" : "", o.vertexColors ? "#define USE_COLOR" : "", o.vertexUvs ? "#define USE_UV" : "", o.gradientMap ? "#define USE_GRADIENTMAP" : "", o.flatShading ? "#define FLAT_SHADED" : "", o.doubleSided ? "#define DOUBLE_SIDED" : "", o.flipSided ? "#define FLIP_SIDED" : "", o.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", o.shadowMapEnabled ? "#define " + A : "", o.premultipliedAlpha ? "#define PREMULTIPLIED_ALPHA" : "", o.physicallyCorrectLights ? "#define PHYSICALLY_CORRECT_LIGHTS" : "", o.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", o.logarithmicDepthBuffer && (o.isWebGL2 || e.get("EXT_frag_depth")) ? "#define USE_LOGDEPTHBUF_EXT" : "", (i.extensions && i.extensions.shaderTextureLOD || o.envMap) && (o.isWebGL2 || e.get("EXT_shader_texture_lod")) ? "#define TEXTURE_LOD_EXT" : "", "uniform mat4 viewMatrix;", "uniform vec3 cameraPosition;", o.toneMapping !== Ta ? "#define TONE_MAPPING" : "", o.toneMapping !== Ta ? Zl.tonemapping_pars_fragment : "", o.toneMapping !== Ta ? oe("toneMapping", o.toneMapping) : "", o.dithering ? "#define DITHERING" : "", o.outputEncoding || o.mapEncoding || o.matcapEncoding || o.envMapEncoding || o.emissiveMapEncoding ? Zl.encodings_pars_fragment : "", o.mapEncoding ? re("mapTexelToLinear", o.mapEncoding) : "", o.matcapEncoding ? re("matcapTexelToLinear", o.matcapEncoding) : "", o.envMapEncoding ? re("envMapTexelToLinear", o.envMapEncoding) : "", o.emissiveMapEncoding ? re("emissiveMapTexelToLinear", o.emissiveMapEncoding) : "", o.outputEncoding ? ("linearToOutputTexel", b = o.outputEncoding, _ = ne(b), "vec4 linearToOutputTexel( vec4 value ) { return LinearTo" + _[0] + _[1] + "; }") : "", o.depthPacking ? "#define DEPTH_PACKING " + i.depthPacking : "", "\n"].filter(ae).join("\n")), S = ce(S = se(S = le(S), o), o), T = ce(T = se(T = le(T), o), o), S = he(S), T = he(T), o.isWebGL2 && !i.isRawShaderMaterial && (c = 0, l = /^\s*#version\s+300\s+es\s*\n/, i.isShaderMaterial && null !== S.match(l) && null !== T.match(l) && (c = 1, S = S.replace(l, ""), T = T.replace(l, "")), a = "#version 300 es\n\n#define attribute in\n#define varying out\n#define texture2D texture\n" + a, s = ["#version 300 es\n\n#define varying in", c ? "" : "out highp vec4 pc_fragColor;", c ? "" : "#define gl_FragColor pc_fragColor", "#define gl_FragDepthEXT gl_FragDepth\n#define texture2D texture\n#define textureCube texture\n#define texture2DProj textureProj\n#define texture2DLodEXT textureLod\n#define texture2DProjLodEXT textureProjLod\n#define textureCubeLodEXT textureLod\n#define texture2DGradEXT textureGrad\n#define texture2DProjGradEXT textureProjGrad\n#define textureCubeGradEXT textureGrad"].join("\n") + "\n" + s, z > 0 && (a = (a = a.replace("#version 300 es\n", ["#version 300 es\n\n#extension GL_OVR_multiview2 : require", "layout(num_views = " + z + ") in;", "#define VIEW_ID gl_ViewID_OVR"].join("\n"))).replace("uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;", ["uniform mat4 modelViewMatrices[" + z + "];", "uniform mat4 projectionMatrices[" + z + "];", "uniform mat4 viewMatrices[" + z + "];", "uniform mat3 normalMatrices[" + z + "];", "#define modelViewMatrix modelViewMatrices[VIEW_ID]\n#define projectionMatrix projectionMatrices[VIEW_ID]\n#define viewMatrix viewMatrices[VIEW_ID]\n#define normalMatrix normalMatrices[VIEW_ID]"].join("\n")), s = (s = s.replace("#version 300 es\n", "#version 300 es\n\n#extension GL_OVR_multiview2 : require\n#define VIEW_ID gl_ViewID_OVR")).replace("uniform mat4 viewMatrix;", ["uniform mat4 viewMatrices[" + z + "];", "#define viewMatrix viewMatrices[VIEW_ID]"].join("\n")))), u = s + T, h = ee(w, 35633, a + S), p = ee(w, 35632, u), w.attachShader(D, h), w.attachShader(D, p), void 0 !== i.index0AttributeName ? w.bindAttribLocation(D, 0, i.index0AttributeName) : 1 == o.morphTargets && w.bindAttribLocation(D, 0, "position"), w.linkProgram(D), t.debug.checkShaderErrors && (d = w.getProgramInfoLog(D).trim(), f = w.getShaderInfoLog(h).trim(), m = w.getShaderInfoLog(p).trim(), g = 1, v = 1, 0 == w.getProgramParameter(D, 35714) ? (g = 0, ie(w, h, "vertex"), ie(w, p, "fragment")) : "" !== d || "" !== f && "" !== m || (v = 0), v && (this.diagnostics = { + runnable: g, + material: i, + programLog: d, + vertexShader: { + log: f, + prefix: a + }, + fragmentShader: { + log: m, + prefix: s + } + })), w.deleteShader(h), w.deleteShader(p), this.getUniforms = function() { + return void 0 === y && (y = new te(w, D)), y + }, this.getAttributes = function() { + return void 0 === x && (x = function(t, e) { + var n, i, r = {}, + o = t.getProgramParameter(e, 35721); + for (n = 0; n < o; n++) r[i = t.getActiveAttrib(e, n).name] = t.getAttribLocation(e, i); + return r + }(w, D)), x + }, this.destroy = function() { + w.deleteProgram(D), this.program = void 0 + }, this.name = r.name, this.id = cu++, this.code = n, this.usedTimes = 1, this.program = D, this.vertexShader = h, this.fragmentShader = p, this.numMultiviewViews = z, this + } + + function me(t, e, n) { + function i(t, e) { + var n; + return t ? t.isTexture ? n = t.encoding : t.isWebGLRenderTarget && (n = t.texture.encoding) : n = js, n === js && e && (n = Gs), n + } + var r = [], + o = { + MeshDepthMaterial: "depth", + MeshDistanceMaterial: "distanceRGBA", + MeshNormalMaterial: "normal", + MeshBasicMaterial: "basic", + MeshLambertMaterial: "lambert", + MeshPhongMaterial: "phong", + MeshToonMaterial: "phong", + MeshStandardMaterial: "physical", + MeshPhysicalMaterial: "physical", + MeshMatcapMaterial: "matcap", + LineBasicMaterial: "basic", + LineDashedMaterial: "dashed", + PointsMaterial: "points", + ShadowMaterial: "shadow", + SpriteMaterial: "sprite" + }, + a = ["precision", "supportsVertexTextures", "instancing", "map", "mapEncoding", "matcap", "matcapEncoding", "envMap", "envMapMode", "envMapEncoding", "lightMap", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "objectSpaceNormalMap", "tangentSpaceNormalMap", "clearcoatNormalMap", "displacementMap", "specularMap", "roughnessMap", "metalnessMap", "gradientMap", "alphaMap", "combine", "vertexColors", "vertexTangents", "fog", "useFog", "fogExp2", "flatShading", "sizeAttenuation", "logarithmicDepthBuffer", "skinning", "maxBones", "useVertexTexture", "morphTargets", "morphNormals", "maxMorphTargets", "maxMorphNormals", "premultipliedAlpha", "numDirLights", "numPointLights", "numSpotLights", "numHemiLights", "numRectAreaLights", "shadowMapEnabled", "shadowMapType", "toneMapping", "physicallyCorrectLights", "alphaTest", "doubleSided", "flipSided", "numClippingPlanes", "numClipIntersection", "depthPacking", "dithering", "sheen"]; + this.getParameters = function(e, r, a, s, c, l, u) { + var h, p = o[e.type], + d = u.isSkinnedMesh ? function(t) { + var e, i, r = t.skeleton.bones; + return n.floatVertexTextures ? 1024 : (e = n.maxVertexUniforms, (i = Math.min(Math.floor((e - 20) / 4), r.length)) < r.length ? 0 : i) + }(u) : 0, + f = n.precision; + return null !== e.precision && (f = n.getMaxPrecision(e.precision), e.precision), h = t.getRenderTarget(), { + isWebGL2: n.isWebGL2, + shaderID: p, + precision: f, + instancing: 1 == u.isInstancedMesh, + supportsVertexTextures: n.vertexTextures, + outputEncoding: i(h ? h.texture : null, t.gammaOutput), + map: !!e.map, + mapEncoding: i(e.map, t.gammaInput), + matcap: !!e.matcap, + matcapEncoding: i(e.matcap, t.gammaInput), + envMap: !!e.envMap, + envMapMode: e.envMap && e.envMap.mapping, + envMapEncoding: i(e.envMap, t.gammaInput), + envMapCubeUV: !!e.envMap && (e.envMap.mapping === Ra || e.envMap.mapping === Fa), + lightMap: !!e.lightMap, + aoMap: !!e.aoMap, + emissiveMap: !!e.emissiveMap, + emissiveMapEncoding: i(e.emissiveMap, t.gammaInput), + bumpMap: !!e.bumpMap, + normalMap: !!e.normalMap, + objectSpaceNormalMap: e.normalMapType === Qs, + tangentSpaceNormalMap: e.normalMapType === $s, + clearcoatNormalMap: !!e.clearcoatNormalMap, + displacementMap: !!e.displacementMap, + roughnessMap: !!e.roughnessMap, + metalnessMap: !!e.metalnessMap, + specularMap: !!e.specularMap, + alphaMap: !!e.alphaMap, + gradientMap: !!e.gradientMap, + sheen: !!e.sheen, + combine: e.combine, + vertexTangents: e.normalMap && e.vertexTangents, + vertexColors: e.vertexColors, + vertexUvs: !!(e.map || e.bumpMap || e.normalMap || e.specularMap || e.alphaMap || e.emissiveMap || e.roughnessMap || e.metalnessMap || e.clearcoatNormalMap), + fog: !!s, + useFog: e.fog, + fogExp2: s && s.isFogExp2, + flatShading: e.flatShading, + sizeAttenuation: e.sizeAttenuation, + logarithmicDepthBuffer: n.logarithmicDepthBuffer, + skinning: e.skinning && d > 0, + maxBones: d, + useVertexTexture: n.floatVertexTextures, + morphTargets: e.morphTargets, + morphNormals: e.morphNormals, + maxMorphTargets: t.maxMorphTargets, + maxMorphNormals: t.maxMorphNormals, + numDirLights: r.directional.length, + numPointLights: r.point.length, + numSpotLights: r.spot.length, + numRectAreaLights: r.rectArea.length, + numHemiLights: r.hemi.length, + numDirLightShadows: r.directionalShadowMap.length, + numPointLightShadows: r.pointShadowMap.length, + numSpotLightShadows: r.spotShadowMap.length, + numClippingPlanes: c, + numClipIntersection: l, + dithering: e.dithering, + shadowMapEnabled: t.shadowMap.enabled && a.length > 0, + shadowMapType: t.shadowMap.type, + toneMapping: e.toneMapped ? t.toneMapping : Ta, + physicallyCorrectLights: t.physicallyCorrectLights, + premultipliedAlpha: e.premultipliedAlpha, + alphaTest: e.alphaTest, + doubleSided: e.side === Vo, + flipSided: e.side === jo, + depthPacking: void 0 !== e.depthPacking ? e.depthPacking : 0 + } + }, this.getProgramCode = function(e, n) { + var i, r, o = []; + if (n.shaderID ? o.push(n.shaderID) : (o.push(e.fragmentShader), o.push(e.vertexShader)), void 0 !== e.defines) + for (i in e.defines) o.push(i), o.push(e.defines[i]); + for (r = 0; r < 59; r++) o.push(n[a[r]]); + return o.push(e.onBeforeCompile.toString()), o.push(t.gammaOutput), o.push(t.gammaFactor), o.join() + }, this.acquireProgram = function(n, i, o, a) { + var s, c, l, u; + for (c = 0, l = r.length; c < l; c++) + if ((u = r[c]).code === a) { + ++(s = u).usedTimes; + break + } + return void 0 === s && (s = new fe(t, e, a, n, i, o), r.push(s)), s + }, this.releaseProgram = function(t) { + if (0 == --t.usedTimes) { + var e = r.indexOf(t); + r[e] = r[r.length - 1], r.pop(), t.destroy() + } + }, this.programs = r + } + + function ge() { + var t = new WeakMap; + return { + get: function(e) { + var n = t.get(e); + return void 0 === n && (n = {}, t.set(e, n)), n + }, + remove: function(e) { + t.delete(e) + }, + update: function(e, n, i) { + t.get(e)[n] = i + }, + dispose: function() { + t = new WeakMap + } + } + } + + function ve(t, e) { + return t.groupOrder !== e.groupOrder ? t.groupOrder - e.groupOrder : t.renderOrder !== e.renderOrder ? t.renderOrder - e.renderOrder : t.program !== e.program ? t.program.id - e.program.id : t.material.id !== e.material.id ? t.material.id - e.material.id : t.z !== e.z ? t.z - e.z : t.id - e.id + } + + function ye(t, e) { + return t.groupOrder !== e.groupOrder ? t.groupOrder - e.groupOrder : t.renderOrder !== e.renderOrder ? t.renderOrder - e.renderOrder : t.z !== e.z ? e.z - t.z : t.id - e.id + } + + function xe() { + function t(t, i, r, a, s, c) { + var l = e[n]; + return void 0 === l ? (l = { + id: t.id, + object: t, + geometry: i, + material: r, + program: r.program || o, + groupOrder: a, + renderOrder: t.renderOrder, + z: s, + group: c + }, e[n] = l) : (l.id = t.id, l.object = t, l.geometry = i, l.material = r, l.program = r.program || o, l.groupOrder = a, l.renderOrder = t.renderOrder, l.z = s, l.group = c), n++, l + } + var e = [], + n = 0, + i = [], + r = [], + o = { + id: -1 + }; + return { + opaque: i, + transparent: r, + init: function() { + n = 0, i.length = 0, r.length = 0 + }, + push: function(e, n, o, a, s, c) { + var l = t(e, n, o, a, s, c); + (1 == o.transparent ? r : i).push(l) + }, + unshift: function(e, n, o, a, s, c) { + var l = t(e, n, o, a, s, c); + (1 == o.transparent ? r : i).unshift(l) + }, + sort: function() { + i.length > 1 && i.sort(ve), r.length > 1 && r.sort(ye) + } + } + } + + function be() { + function t(n) { + var i = n.target; + i.removeEventListener("dispose", t), e.delete(i) + } + var e = new WeakMap; + return { + get: function(n, i) { + var r, o = e.get(n); + return void 0 === o ? (r = new xe, e.set(n, new WeakMap), e.get(n).set(i, r), n.addEventListener("dispose", t)) : void 0 === (r = o.get(i)) && (r = new xe, o.set(i, r)), r + }, + dispose: function() { + e = new WeakMap + } + } + } + + function _e() { + var t = {}; + return { + get: function(n) { + if (void 0 !== t[n.id]) return t[n.id]; + var r; + switch (n.type) { + case "DirectionalLight": + r = { + direction: new i, + color: new x, + shadow: 0, + shadowBias: 0, + shadowRadius: 1, + shadowMapSize: new e + }; + break; + case "SpotLight": + r = { + position: new i, + direction: new i, + color: new x, + distance: 0, + coneCos: 0, + penumbraCos: 0, + decay: 0, + shadow: 0, + shadowBias: 0, + shadowRadius: 1, + shadowMapSize: new e + }; + break; + case "PointLight": + r = { + position: new i, + color: new x, + distance: 0, + decay: 0, + shadow: 0, + shadowBias: 0, + shadowRadius: 1, + shadowMapSize: new e, + shadowCameraNear: 1, + shadowCameraFar: 1e3 + }; + break; + case "HemisphereLight": + r = { + direction: new i, + skyColor: new x, + groundColor: new x + }; + break; + case "RectAreaLight": + r = { + color: new x, + position: new i, + halfWidth: new i, + halfHeight: new i + } + } + return t[n.id] = r, r + } + } + } + + function we(t, e) { + return (e.castShadow ? 1 : 0) - (t.castShadow ? 1 : 0) + } + + function Me() { + var t, e, n, r, o = new _e, + a = { + version: 0, + hash: { + directionalLength: -1, + pointLength: -1, + spotLength: -1, + rectAreaLength: -1, + hemiLength: -1, + numDirectionalShadows: -1, + numPointShadows: -1, + numSpotShadows: -1 + }, + ambient: [0, 0, 0], + probe: [], + directional: [], + directionalShadowMap: [], + directionalShadowMatrix: [], + spot: [], + spotShadowMap: [], + spotShadowMatrix: [], + rectArea: [], + point: [], + pointShadowMap: [], + pointShadowMatrix: [], + hemi: [], + numDirectionalShadows: -1, + numPointShadows: -1, + numSpotShadows: -1 + }; + for (t = 0; t < 9; t++) a.probe.push(new i); + return e = new i, n = new l, r = new l, { + setup: function(t, i, s) { + var c, l, u, h, p, d, f, m, g, v, y, x, b, _, w, M, S, T, A, L, C = 0, + P = 0, + E = 0; + for (c = 0; c < 9; c++) a.probe[c].set(0, 0, 0); + for (l = 0, u = 0, h = 0, p = 0, d = 0, f = 0, m = 0, g = 0, v = s.matrixWorldInverse, t.sort(we), c = 0, y = t.length; c < y; c++) + if (b = (x = t[c]).color, _ = x.intensity, w = x.distance, M = x.shadow && x.shadow.map ? x.shadow.map.texture : null, x.isAmbientLight) C += b.r * _, P += b.g * _, E += b.b * _; + else if (x.isLightProbe) + for (S = 0; S < 9; S++) a.probe[S].addScaledVector(x.sh.coefficients[S], _); + else x.isDirectionalLight ? ((T = o.get(x)).color.copy(x.color).multiplyScalar(x.intensity), T.direction.setFromMatrixPosition(x.matrixWorld), e.setFromMatrixPosition(x.target.matrixWorld), T.direction.sub(e), T.direction.transformDirection(v), T.shadow = x.castShadow, x.castShadow && (A = x.shadow, T.shadowBias = A.bias, T.shadowRadius = A.radius, T.shadowMapSize = A.mapSize, a.directionalShadowMap[l] = M, a.directionalShadowMatrix[l] = x.shadow.matrix, f++), a.directional[l] = T, l++) : x.isSpotLight ? ((T = o.get(x)).position.setFromMatrixPosition(x.matrixWorld), T.position.applyMatrix4(v), T.color.copy(b).multiplyScalar(_), T.distance = w, T.direction.setFromMatrixPosition(x.matrixWorld), e.setFromMatrixPosition(x.target.matrixWorld), T.direction.sub(e), T.direction.transformDirection(v), T.coneCos = Math.cos(x.angle), T.penumbraCos = Math.cos(x.angle * (1 - x.penumbra)), T.decay = x.decay, T.shadow = x.castShadow, x.castShadow && (A = x.shadow, T.shadowBias = A.bias, T.shadowRadius = A.radius, T.shadowMapSize = A.mapSize, a.spotShadowMap[h] = M, a.spotShadowMatrix[h] = x.shadow.matrix, g++), a.spot[h] = T, h++) : x.isRectAreaLight ? ((T = o.get(x)).color.copy(b).multiplyScalar(_), T.position.setFromMatrixPosition(x.matrixWorld), T.position.applyMatrix4(v), r.identity(), n.copy(x.matrixWorld), n.premultiply(v), r.extractRotation(n), T.halfWidth.set(.5 * x.width, 0, 0), T.halfHeight.set(0, .5 * x.height, 0), T.halfWidth.applyMatrix4(r), T.halfHeight.applyMatrix4(r), a.rectArea[p] = T, p++) : x.isPointLight ? ((T = o.get(x)).position.setFromMatrixPosition(x.matrixWorld), T.position.applyMatrix4(v), T.color.copy(x.color).multiplyScalar(x.intensity), T.distance = x.distance, T.decay = x.decay, T.shadow = x.castShadow, x.castShadow && (A = x.shadow, T.shadowBias = A.bias, T.shadowRadius = A.radius, T.shadowMapSize = A.mapSize, T.shadowCameraNear = A.camera.near, T.shadowCameraFar = A.camera.far, a.pointShadowMap[u] = M, a.pointShadowMatrix[u] = x.shadow.matrix, m++), a.point[u] = T, u++) : x.isHemisphereLight && ((T = o.get(x)).direction.setFromMatrixPosition(x.matrixWorld), T.direction.transformDirection(v), T.direction.normalize(), T.skyColor.copy(x.color).multiplyScalar(_), T.groundColor.copy(x.groundColor).multiplyScalar(_), a.hemi[d] = T, d++); + a.ambient[0] = C, a.ambient[1] = P, a.ambient[2] = E, (L = a.hash).directionalLength === l && L.pointLength === u && L.spotLength === h && L.rectAreaLength === p && L.hemiLength === d && L.numDirectionalShadows === f && L.numPointShadows === m && L.numSpotShadows === g || (a.directional.length = l, a.spot.length = h, a.rectArea.length = p, a.point.length = u, a.hemi.length = d, a.directionalShadowMap.length = f, a.pointShadowMap.length = m, a.spotShadowMap.length = g, a.directionalShadowMatrix.length = f, a.pointShadowMatrix.length = m, a.spotShadowMatrix.length = g, L.directionalLength = l, L.pointLength = u, L.spotLength = h, L.rectAreaLength = p, L.hemiLength = d, L.numDirectionalShadows = f, L.numPointShadows = m, L.numSpotShadows = g, a.version = hu++) + }, + state: a + } + } + + function Se() { + var t = new Me, + e = [], + n = []; + return { + init: function() { + e.length = 0, n.length = 0 + }, + state: { + lightsArray: e, + shadowsArray: n, + lights: t + }, + setupLights: function(i) { + t.setup(e, n, i) + }, + pushLight: function(t) { + e.push(t) + }, + pushShadow: function(t) { + n.push(t) + } + } + } + + function Te() { + function t(n) { + var i = n.target; + i.removeEventListener("dispose", t), e.delete(i) + } + var e = new WeakMap; + return { + get: function(n, i) { + var r; + return 0 == e.has(n) ? (r = new Se, e.set(n, new WeakMap), e.get(n).set(i, r), n.addEventListener("dispose", t)) : 0 == e.get(n).has(i) ? (r = new Se, e.get(n).set(i, r)) : r = e.get(n).get(i), r + }, + dispose: function() { + e = new WeakMap + } + } + } + + function Ae(t) { + S.call(this), this.type = "MeshDepthMaterial", this.depthPacking = Zs, this.skinning = 0, this.morphTargets = 0, this.map = null, this.alphaMap = null, this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.wireframe = 0, this.wireframeLinewidth = 1, this.fog = 0, this.setValues(t) + } + + function Le(t) { + S.call(this), this.type = "MeshDistanceMaterial", this.referencePosition = new i, this.nearDistance = 1, this.farDistance = 1e3, this.skinning = 0, this.morphTargets = 0, this.map = null, this.alphaMap = null, this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.fog = 0, this.setValues(t) + } + + function Ce(t, n, i) { + function r(e, i) { + var r = n.update(u); + P.uniforms.shadow_pass.value = e.map.texture, P.uniforms.resolution.value = e.mapSize, P.uniforms.radius.value = e.radius, t.setRenderTarget(e.mapPass), t.clear(), t.renderBufferDirect(i, null, r, P, u, null), E.uniforms.shadow_pass.value = e.mapPass.texture, E.uniforms.resolution.value = e.mapSize, E.uniforms.radius.value = e.radius, t.setRenderTarget(e.map), t.clear(), t.renderBufferDirect(i, null, r, E, u, null) + } + + function o(e, n, i, r, o, a) { + var s, c, l, u, h, p, d, f = e.geometry, + m = null, + g = S, + v = e.customDepthMaterial; + return i.isPointLight && (g = T, v = e.customDistanceMaterial), v ? m = v : (s = 0, n.morphTargets && (f && f.isBufferGeometry ? s = f.morphAttributes && f.morphAttributes.position && f.morphAttributes.position.length > 0 : f && f.isGeometry && (s = f.morphTargets && f.morphTargets.length > 0)), e.isSkinnedMesh && n.skinning, c = e.isSkinnedMesh && n.skinning, l = 0, s && (l |= _), c && (l |= w), m = g[l]), t.localClippingEnabled && 1 == n.clipShadows && 0 !== n.clippingPlanes.length && (u = m.uuid, h = n.uuid, void 0 === (p = L[u]) && (p = {}, L[u] = p), void 0 === (d = p[h]) && (d = m.clone(), p[h] = d), m = d), m.visible = n.visible, m.wireframe = n.wireframe, m.side = a === Bo ? null != n.shadowSide ? n.shadowSide : n.side : null != n.shadowSide ? n.shadowSide : C[n.side], m.clipShadows = n.clipShadows, m.clippingPlanes = n.clippingPlanes, m.clipIntersection = n.clipIntersection, m.wireframeLinewidth = n.wireframeLinewidth, m.linewidth = n.linewidth, i.isPointLight && m.isMeshDistanceMaterial && (m.referencePosition.setFromMatrixPosition(i.matrixWorld), m.nearDistance = r, m.farDistance = o), m + } + + function c(e, i, r, a, s) { + var l, u, h, p, d, f, m, g, y, x, b; + if (0 != e.visible) { + if (e.layers.test(i.layers) && (e.isMesh || e.isLine || e.isPoints) && (e.castShadow || e.receiveShadow && s === Bo) && (!e.frustumCulled || v.intersectsObject(e))) + if (e.modelViewMatrix.multiplyMatrices(r.matrixWorldInverse, e.matrixWorld), l = n.update(e), u = e.material, Array.isArray(u)) + for (p = 0, d = (h = l.groups).length; p < d; p++)(m = u[(f = h[p]).materialIndex]) && m.visible && (g = o(e, m, a, r.near, r.far, s), t.renderBufferDirect(r, null, l, g, e, f)); + else u.visible && (g = o(e, u, a, r.near, r.far, s), t.renderBufferDirect(r, null, l, g, e, null)); + for (x = 0, b = (y = e.children).length; x < b; x++) c(y[x], i, r, a, s) + } + } + var l, u, h, p, d, f, m, g, v = new Q, + y = new e, + x = new e, + b = new a, + _ = 1, + w = 2, + M = 1 + (_ | w), + S = Array(M), + T = Array(M), + L = {}, + C = { + 0: jo, + 1: Uo, + 2: Vo + }, + P = new H({ + defines: { + SAMPLE_RATE: .25, + HALF_SAMPLE_RATE: 1 / 8 + }, + uniforms: { + shadow_pass: { + value: null + }, + resolution: { + value: new e + }, + radius: { + value: 4 + } + }, + vertexShader: du, + fragmentShader: pu + }), + E = P.clone(); + for (E.defines.HORIZONAL_PASS = 1, (l = new k).addAttribute("position", new A(new Float32Array([-1, -1, .5, 3, -1, .5, -1, 3, .5]), 3)), u = new B(l, P), h = 0; h !== M; ++h) f = new Ae({ + depthPacking: Js, + morphTargets: p = 0 != (h & _), + skinning: d = 0 != (h & w) + }), S[h] = f, m = new Le({ + morphTargets: p, + skinning: d + }), T[h] = m; + g = this, this.enabled = 0, this.autoUpdate = 1, this.needsUpdate = 0, this.type = Fo, this.render = function(e, n, o) { + var a, l, u, h, p, d, f, m, _, w, M, S, T; + if (0 != g.enabled && (0 != g.autoUpdate || 0 != g.needsUpdate) && 0 !== e.length) { + for (a = t.getRenderTarget(), l = t.getActiveCubeFace(), u = t.getActiveMipmapLevel(), (h = t.state).setBlending(qo), h.buffers.color.setClear(1, 1, 1, 1), h.buffers.depth.setTest(1), h.setScissorTest(0), p = 0, d = e.length; p < d; p++) + if (void 0 !== (m = (f = e[p]).shadow)) { + for (y.copy(m.mapSize), _ = m.getFrameExtents(), y.multiply(_), x.copy(m.mapSize), (y.x > i || y.y > i) && (y.x > i && (x.x = Math.floor(i / _.x), y.x = x.x * _.x, m.mapSize.x = x.x), y.y > i && (x.y = Math.floor(i / _.y), y.y = x.y * _.y, m.mapSize.y = x.y)), null !== m.map || m.isPointLightShadow || this.type !== Bo || (w = { + minFilter: Wa, + magFilter: Wa, + format: ss + }, m.map = new s(y.x, y.y, w), m.map.texture.name = f.name + ".shadowMap", m.mapPass = new s(y.x, y.y, w), m.camera.updateProjectionMatrix()), null === m.map && (w = { + minFilter: ja, + magFilter: ja, + format: ss + }, m.map = new s(y.x, y.y, w), m.map.texture.name = f.name + ".shadowMap", m.camera.updateProjectionMatrix()), t.setRenderTarget(m.map), t.clear(), M = m.getViewportCount(), S = 0; S < M; S++) T = m.getViewport(S), b.set(x.x * T.x, x.y * T.y, x.x * T.z, x.y * T.w), h.viewport(b), m.updateMatrices(f, o, S), v = m.getFrustum(), c(n, o, m.camera, f, this.type); + m.isPointLightShadow || this.type !== Bo || r(m, o) + } + g.needsUpdate = 0, t.setRenderTarget(a, l, u) + } + } + } + + function Pe(t, e, n, i) { + function r(e, n, i) { + var r, o = new Uint8Array(4), + a = t.createTexture(); + for (t.bindTexture(e, a), t.texParameteri(e, 10241, 9728), t.texParameteri(e, 10240, 9728), r = 0; r < i; r++) t.texImage2D(n + r, 0, 6408, 1, 1, 0, 6408, 5121, o); + return a + } + + function o(n, r) { + M[n] = 1, 0 === S[n] && (t.enableVertexAttribArray(n), S[n] = 1), T[n] !== r && ((i.isWebGL2 ? t : e.get("ANGLE_instanced_arrays"))[i.isWebGL2 ? "vertexAttribDivisor" : "vertexAttribDivisorANGLE"](n, r), T[n] = r) + } + + function s(e) { + 1 != A[e] && (t.enable(e), A[e] = 1) + } + + function c(e) { + 0 != A[e] && (t.disable(e), A[e] = 0) + } + + function l(e, i, r, o, a, l, u, h) { + if (e !== qo) { + if (P || (s(3042), P = 1), e === $o) a = a || i, l = l || r, u = u || o, i === N && a === I || (t.blendEquationSeparate(n.convert(i), n.convert(a)), N = i, I = a), r === O && o === D && l === z && u === R || (t.blendFuncSeparate(n.convert(r), n.convert(o), n.convert(l), n.convert(u)), O = r, D = o, z = l, R = u), E = e, F = null; + else if (e !== E || h !== F) { + if (N === Qo && I === Qo || (t.blendEquation(32774), N = Qo, I = Qo), h) switch (e) { + case Xo: + t.blendFuncSeparate(1, 771, 1, 771); + break; + case Yo: + t.blendFunc(1, 1); + break; + case Zo: + t.blendFuncSeparate(0, 0, 769, 771); + break; + case Jo: + t.blendFuncSeparate(0, 768, 0, 770) + } else switch (e) { + case Xo: + t.blendFuncSeparate(770, 771, 1, 771); + break; + case Yo: + t.blendFunc(770, 1); + break; + case Zo: + t.blendFunc(0, 769); + break; + case Jo: + t.blendFunc(0, 768) + } + O = null, D = null, z = null, R = null, E = e, F = h + } + } else P && (c(3042), P = 0) + } + + function u(e) { + k !== e && (e ? t.frontFace(2304) : t.frontFace(2305), k = e) + } + + function h(e) { + e !== Io ? (s(2884), e !== B && (e === zo ? t.cullFace(1029) : e === Ro ? t.cullFace(1028) : t.cullFace(1032))) : c(2884), B = e + } + + function p(e, n, i) { + e ? (s(32823), j === n && V === i || (t.polygonOffset(n, i), j = n, V = i)) : c(32823) + } + + function d(e) { + void 0 === e && (e = 33984 + G - 1), f !== e && (t.activeTexture(e), f = e) + } + var f, m, g, v, y, x = new function() { + var e = 0, + n = new a, + i = null, + r = new a(0, 0, 0, 0); + return { + setMask: function(n) { + i === n || e || (t.colorMask(n, n, n, n), i = n) + }, + setLocked: function(t) { + e = t + }, + setClear: function(e, i, o, a, s) { + 1 == s && (e *= a, i *= a, o *= a), n.set(e, i, o, a), 0 == r.equals(n) && (t.clearColor(e, i, o, a), r.copy(n)) + }, + reset: function() { + e = 0, i = null, r.set(-1, 0, 0, 0) + } + } + }, + b = new function() { + var e = 0, + n = null, + i = null, + r = null; + return { + setTest: function(t) { + t ? s(2929) : c(2929) + }, + setMask: function(i) { + n === i || e || (t.depthMask(i), n = i) + }, + setFunc: function(e) { + if (i !== e) { + if (e) switch (e) { + case fa: + t.depthFunc(512); + break; + case ma: + t.depthFunc(519); + break; + case ga: + t.depthFunc(513); + break; + case va: + t.depthFunc(515); + break; + case ya: + t.depthFunc(514); + break; + case xa: + t.depthFunc(518); + break; + case ba: + t.depthFunc(516); + break; + case _a: + t.depthFunc(517); + break; + default: + t.depthFunc(515) + } else t.depthFunc(515); + i = e + } + }, + setLocked: function(t) { + e = t + }, + setClear: function(e) { + r !== e && (t.clearDepth(e), r = e) + }, + reset: function() { + e = 0, n = null, i = null, r = null + } + } + }, + _ = new function() { + var e = 0, + n = null, + i = null, + r = null, + o = null, + a = null, + l = null, + u = null, + h = null; + return { + setTest: function(t) { + e || (t ? s(2960) : c(2960)) + }, + setMask: function(i) { + n === i || e || (t.stencilMask(i), n = i) + }, + setFunc: function(e, n, a) { + i === e && r === n && o === a || (t.stencilFunc(e, n, a), i = e, r = n, o = a) + }, + setOp: function(e, n, i) { + a === e && l === n && u === i || (t.stencilOp(e, n, i), a = e, l = n, u = i) + }, + setLocked: function(t) { + e = t + }, + setClear: function(e) { + h !== e && (t.clearStencil(e), h = e) + }, + reset: function() { + e = 0, n = null, i = null, r = null, o = null, a = null, l = null, u = null, h = null + } + } + }, + w = t.getParameter(34921), + M = new Uint8Array(w), + S = new Uint8Array(w), + T = new Uint8Array(w), + A = {}, + L = null, + C = null, + P = null, + E = null, + N = null, + O = null, + D = null, + I = null, + z = null, + R = null, + F = 0, + k = null, + B = null, + U = null, + j = null, + V = null, + G = t.getParameter(35661), + W = 0, + H = 0, + q = t.getParameter(7938); + return -1 !== q.indexOf("WebGL") ? (H = parseFloat(/^WebGL\ ([0-9])/.exec(q)[1]), W = H >= 1) : -1 !== q.indexOf("OpenGL ES") && (H = parseFloat(/^OpenGL\ ES\ ([0-9])/.exec(q)[1]), W = H >= 2), f = null, m = {}, g = new a, v = new a, (y = {})[3553] = r(3553, 3553, 1), y[34067] = r(34067, 34069, 6), x.setClear(0, 0, 0, 1), b.setClear(1), _.setClear(0), s(2929), b.setFunc(va), u(0), h(zo), s(2884), l(qo), { + buffers: { + color: x, + depth: b, + stencil: _ + }, + initAttributes: function() { + for (var t = 0, e = M.length; t < e; t++) M[t] = 0 + }, + enableAttribute: function(t) { + o(t, 0) + }, + enableAttributeAndDivisor: o, + disableUnusedAttributes: function() { + for (var e = 0, n = S.length; e !== n; ++e) S[e] !== M[e] && (t.disableVertexAttribArray(e), S[e] = 0) + }, + enable: s, + disable: c, + getCompressedTextureFormats: function() { + var n, i; + if (null === L && (L = [], e.get("WEBGL_compressed_texture_pvrtc") || e.get("WEBGL_compressed_texture_s3tc") || e.get("WEBGL_compressed_texture_etc1") || e.get("WEBGL_compressed_texture_astc"))) + for (n = t.getParameter(34467), i = 0; i < n.length; i++) L.push(n[i]); + return L + }, + useProgram: function(e) { + return C !== e ? (t.useProgram(e), C = e, 1) : 0 + }, + setBlending: l, + setMaterial: function(t, e) { + var n, i; + t.side === Vo ? c(2884) : s(2884), n = t.side === jo, e && (n = !n), u(n), t.blending === Xo && 0 == t.transparent ? l(qo) : l(t.blending, t.blendEquation, t.blendSrc, t.blendDst, t.blendEquationAlpha, t.blendSrcAlpha, t.blendDstAlpha, t.premultipliedAlpha), b.setFunc(t.depthFunc), b.setTest(t.depthTest), b.setMask(t.depthWrite), x.setMask(t.colorWrite), i = t.stencilWrite, _.setTest(i), i && (_.setMask(t.stencilWriteMask), _.setFunc(t.stencilFunc, t.stencilRef, t.stencilFuncMask), _.setOp(t.stencilFail, t.stencilZFail, t.stencilZPass)), p(t.polygonOffset, t.polygonOffsetFactor, t.polygonOffsetUnits) + }, + setFlipSided: u, + setCullFace: h, + setLineWidth: function(e) { + e !== U && (W && t.lineWidth(e), U = e) + }, + setPolygonOffset: p, + setScissorTest: function(t) { + t ? s(3089) : c(3089) + }, + activeTexture: d, + bindTexture: function(e, n) { + null === f && d(); + var i = m[f]; + void 0 === i && (i = { + type: void 0, + texture: void 0 + }, m[f] = i), i.type === e && i.texture === n || (t.bindTexture(e, n || y[e]), i.type = e, i.texture = n) + }, + compressedTexImage2D: function() { + try { + t.compressedTexImage2D.apply(t, arguments) + } catch (t) {} + }, + texImage2D: function() { + try { + t.texImage2D.apply(t, arguments) + } catch (t) {} + }, + texImage3D: function() { + try { + t.texImage3D.apply(t, arguments) + } catch (t) {} + }, + scissor: function(e) { + 0 == g.equals(e) && (t.scissor(e.x, e.y, e.z, e.w), g.copy(e)) + }, + viewport: function(e) { + 0 == v.equals(e) && (t.viewport(e.x, e.y, e.z, e.w), v.copy(e)) + }, + reset: function() { + for (var e = 0; e < S.length; e++) 1 === S[e] && (t.disableVertexAttribArray(e), S[e] = 0); + A = {}, L = null, f = null, m = {}, C = null, E = null, k = null, B = null, x.reset(), b.reset(), _.reset() + } + } + } + + function Ee(t, e, n, i, r, o, a) { + function s(t, e) { + return L ? new OffscreenCanvas(t, e) : document.createElementNS("http://www.w3.org/1999/xhtml", "canvas") + } + + function c(t, e, n, i) { + var r, o, a, c, l = 1; + return (t.width > i || t.height > i) && (l = i / Math.max(t.width, t.height)), (l < 1 || 1 == e) && ("undefined" != typeof HTMLImageElement && t instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && t instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && t instanceof ImageBitmap) ? (o = (r = e ? ic.floorPowerOfTwo : Math.floor)(l * t.width), a = r(l * t.height), void 0 === T && (T = s(o, a)), (c = n ? s(o, a) : T).width = o, c.height = a, c.getContext("2d").drawImage(t, 0, 0, o, a), c) : t + } + + function l(t) { + return ic.isPowerOfTwo(t.width) && ic.isPowerOfTwo(t.height) + } + + function u(t, e) { + return t.generateMipmaps && e && t.minFilter !== ja && t.minFilter !== Wa + } + + function h(e, n, r, o) { + t.generateMipmap(e), i.get(n).__maxMipLevel = Math.log(Math.max(r, o)) * Math.LOG2E + } + + function p(t, n) { + if (!r.isWebGL2) return t; + var i = t; + return 6403 === t && (5126 === n && (i = 33326), 5131 === n && (i = 33325), 5121 === n && (i = 33321)), 6407 === t && (5126 === n && (i = 34837), 5131 === n && (i = 34843), 5121 === n && (i = 32849)), 6408 === t && (5126 === n && (i = 34836), 5131 === n && (i = 34842), 5121 === n && (i = 32856)), 33325 !== i && 33326 !== i && 34842 !== i && 34836 !== i || e.get("EXT_color_buffer_float"), i + } + + function d(t) { + return t === ja || t === Va || t === Ga ? 9728 : 9729 + } + + function f(e) { + var n = e.target; + n.removeEventListener("dispose", f), + function(e) { + var n = i.get(e); + void 0 !== n.__webglInit && (t.deleteTexture(n.__webglTexture), i.remove(e)) + }(n), n.isVideoTexture && A.delete(n), a.memory.textures-- + } + + function m(e) { + var n = e.target; + n.removeEventListener("dispose", m), + function(e) { + var n, r, o = i.get(e), + s = i.get(e.texture); + if (e) { + if (void 0 !== s.__webglTexture && t.deleteTexture(s.__webglTexture), e.depthTexture && e.depthTexture.dispose(), e.isWebGLRenderTargetCube) + for (n = 0; n < 6; n++) t.deleteFramebuffer(o.__webglFramebuffer[n]), o.__webglDepthbuffer && t.deleteRenderbuffer(o.__webglDepthbuffer[n]); + else t.deleteFramebuffer(o.__webglFramebuffer), o.__webglDepthbuffer && t.deleteRenderbuffer(o.__webglDepthbuffer); + if (e.isWebGLMultiviewRenderTarget) + for (t.deleteTexture(o.__webglColorTexture), t.deleteTexture(o.__webglDepthStencilTexture), a.memory.textures -= 2, n = 0, r = o.__webglViewFramebuffers.length; n < r; n++) t.deleteFramebuffer(o.__webglViewFramebuffers[n]); + i.remove(e.texture), i.remove(e) + } + }(n), a.memory.textures-- + } + + function g(t, e) { + var r, o = i.get(t); + if (t.isVideoTexture && function(t) { + var e = a.render.frame; + A.get(t) !== e && (A.set(t, e), t.update()) + }(t), t.version > 0 && o.__version !== t.version) + if (void 0 === (r = t.image)); + else if (0 != r.complete) return void _(o, t, e); + n.activeTexture(33984 + e), n.bindTexture(3553, o.__webglTexture) + } + + function v(e, a) { + var s, d, f, m, g, v, y, _, w, M, S, T, A, L; + if (6 === e.image.length) + if (s = i.get(e), e.version > 0 && s.__version !== e.version) { + for (b(s, e), n.activeTexture(33984 + a), n.bindTexture(34067, s.__webglTexture), t.pixelStorei(37440, e.flipY), d = e && e.isCompressedTexture, f = e.image[0] && e.image[0].isDataTexture, m = [], g = 0; g < 6; g++) m[g] = d || f ? f ? e.image[g].image : e.image[g] : c(e.image[g], 0, 1, r.maxCubemapSize); + if (y = l(v = m[0]) || r.isWebGL2, M = p(_ = o.convert(e.format), w = o.convert(e.type)), x(34067, e, y), d) { + for (g = 0; g < 6; g++) + for (S = m[g].mipmaps, T = 0; T < S.length; T++) A = S[T], e.format !== ss && e.format !== as ? n.getCompressedTextureFormats().indexOf(_) > -1 && n.compressedTexImage2D(34069 + g, T, M, A.width, A.height, 0, A.data) : n.texImage2D(34069 + g, T, M, A.width, A.height, 0, _, w, A.data); + s.__maxMipLevel = S.length - 1 + } else { + for (S = e.mipmaps, g = 0; g < 6; g++) + if (f) + for (n.texImage2D(34069 + g, 0, M, m[g].width, m[g].height, 0, _, w, m[g].data), T = 0; T < S.length; T++) L = (A = S[T]).image[g].image, n.texImage2D(34069 + g, T + 1, M, L.width, L.height, 0, _, w, L.data); + else + for (n.texImage2D(34069 + g, 0, M, _, w, m[g]), T = 0; T < S.length; T++) A = S[T], n.texImage2D(34069 + g, T + 1, M, _, w, A.image[g]); + s.__maxMipLevel = S.length + } + u(e, y) && h(34067, e, v.width, v.height), s.__version = e.version, e.onUpdate && e.onUpdate(e) + } else n.activeTexture(33984 + a), n.bindTexture(34067, s.__webglTexture) + } + + function y(t, e) { + n.activeTexture(33984 + e), n.bindTexture(34067, i.get(t).__webglTexture) + } + + function x(n, a, s) { + var c; + if (s ? (t.texParameteri(n, 10242, o.convert(a.wrapS)), t.texParameteri(n, 10243, o.convert(a.wrapT)), 32879 !== n && 35866 !== n || t.texParameteri(n, 32882, o.convert(a.wrapR)), t.texParameteri(n, 10240, o.convert(a.magFilter)), t.texParameteri(n, 10241, o.convert(a.minFilter))) : (t.texParameteri(n, 10242, 33071), t.texParameteri(n, 10243, 33071), 32879 !== n && 35866 !== n || t.texParameteri(n, 32882, 33071), a.wrapS !== Ba || a.wrapT, t.texParameteri(n, 10240, d(a.magFilter)), t.texParameteri(n, 10241, d(a.minFilter)), a.minFilter !== ja && a.minFilter), c = e.get("EXT_texture_filter_anisotropic")) { + if (a.type === Ka && null === e.get("OES_texture_float_linear")) return; + if (a.type === ts && null === (r.isWebGL2 || e.get("OES_texture_half_float_linear"))) return; + (a.anisotropy > 1 || i.get(a).__currentAnisotropy) && (t.texParameterf(n, c.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(a.anisotropy, r.getMaxAnisotropy())), i.get(a).__currentAnisotropy = a.anisotropy) + } + } + + function b(e, n) { + void 0 === e.__webglInit && (e.__webglInit = 1, n.addEventListener("dispose", f), e.__webglTexture = t.createTexture(), a.memory.textures++) + } + + function _(e, i, a) { + var s, d, f, m, g, v, y, _, w, M, S = 3553; + if (i.isDataTexture2DArray && (S = 35866), i.isDataTexture3D && (S = 32879), b(e, i), n.activeTexture(33984 + a), n.bindTexture(S, e.__webglTexture), t.pixelStorei(37440, i.flipY), t.pixelStorei(37441, i.premultiplyAlpha), t.pixelStorei(3317, i.unpackAlignment), s = function(t) { + return r.isWebGL2 ? 0 : t.wrapS !== Ba || t.wrapT !== Ba || t.minFilter !== ja && t.minFilter !== Wa + }(i) && 0 == l(i.image), f = l(d = c(i.image, s, 0, r.maxTextureSize)) || r.isWebGL2, v = p(m = o.convert(i.format), g = o.convert(i.type)), x(S, i, f), _ = i.mipmaps, i.isDepthTexture) { + if (v = 6402, i.type === Ka) { + if (!r.isWebGL2) throw Error("Float Depth Texture only supported in WebGL2.0"); + v = 36012 + } else r.isWebGL2 && (v = 33189); + i.format === us && 6402 === v && i.type !== Ja && i.type !== Qa && (i.type = Ja, g = o.convert(i.type)), i.format === hs && (v = 34041, i.type !== rs && (i.type = rs, g = o.convert(i.type))), n.texImage2D(3553, 0, v, d.width, d.height, 0, m, g, null) + } else if (i.isDataTexture) + if (_.length > 0 && f) { + for (w = 0, M = _.length; w < M; w++) y = _[w], n.texImage2D(3553, w, v, y.width, y.height, 0, m, g, y.data); + i.generateMipmaps = 0, e.__maxMipLevel = _.length - 1 + } else n.texImage2D(3553, 0, v, d.width, d.height, 0, m, g, d.data), e.__maxMipLevel = 0; + else if (i.isCompressedTexture) { + for (w = 0, M = _.length; w < M; w++) y = _[w], i.format !== ss && i.format !== as ? n.getCompressedTextureFormats().indexOf(m) > -1 && n.compressedTexImage2D(3553, w, v, y.width, y.height, 0, y.data) : n.texImage2D(3553, w, v, y.width, y.height, 0, m, g, y.data); + e.__maxMipLevel = _.length - 1 + } else if (i.isDataTexture2DArray) n.texImage3D(35866, 0, v, d.width, d.height, d.depth, 0, m, g, d.data), e.__maxMipLevel = 0; + else if (i.isDataTexture3D) n.texImage3D(32879, 0, v, d.width, d.height, d.depth, 0, m, g, d.data), e.__maxMipLevel = 0; + else if (_.length > 0 && f) { + for (w = 0, M = _.length; w < M; w++) y = _[w], n.texImage2D(3553, w, v, m, g, y); + i.generateMipmaps = 0, e.__maxMipLevel = _.length - 1 + } else n.texImage2D(3553, 0, v, m, g, d), e.__maxMipLevel = 0; + u(i, f) && h(3553, i, d.width, d.height), e.__version = i.version, i.onUpdate && i.onUpdate(i) + } + + function w(e, r, a, s) { + var c = o.convert(r.texture.format), + l = o.convert(r.texture.type), + u = p(c, l); + n.texImage2D(s, 0, u, r.width, r.height, 0, c, l, null), t.bindFramebuffer(36160, e), t.framebufferTexture2D(36160, a, s, i.get(r.texture).__webglTexture, 0), t.bindFramebuffer(36160, null) + } + + function M(e, n, i) { + var r, a; + t.bindRenderbuffer(36161, e), n.depthBuffer && !n.stencilBuffer ? (i ? (r = S(n), t.renderbufferStorageMultisample(36161, r, 33189, n.width, n.height)) : t.renderbufferStorage(36161, 33189, n.width, n.height), t.framebufferRenderbuffer(36160, 36096, 36161, e)) : n.depthBuffer && n.stencilBuffer ? (i ? (r = S(n), t.renderbufferStorageMultisample(36161, r, 35056, n.width, n.height)) : t.renderbufferStorage(36161, 34041, n.width, n.height), t.framebufferRenderbuffer(36160, 33306, 36161, e)) : (a = p(o.convert(n.texture.format), o.convert(n.texture.type)), i ? (r = S(n), t.renderbufferStorageMultisample(36161, r, a, n.width, n.height)) : t.renderbufferStorage(36161, a, n.width, n.height)), t.bindRenderbuffer(36161, null) + } + + function S(t) { + return r.isWebGL2 && t.isWebGLMultisampleRenderTarget ? Math.min(r.maxSamples, t.samples) : 0 + } + var T, A = new WeakMap, + L = "undefined" != typeof OffscreenCanvas && null !== new OffscreenCanvas(1, 1).getContext("2d"), + C = 0, + P = 0, + E = 0; + this.allocateTextureUnit = function() { + var t = C; + return r.maxTextures, C += 1, t + }, this.resetTextureUnits = function() { + C = 0 + }, this.setTexture2D = g, this.setTexture2DArray = function(t, e) { + var r = i.get(t); + t.version > 0 && r.__version !== t.version ? _(r, t, e) : (n.activeTexture(33984 + e), n.bindTexture(35866, r.__webglTexture)) + }, this.setTexture3D = function(t, e) { + var r = i.get(t); + t.version > 0 && r.__version !== t.version ? _(r, t, e) : (n.activeTexture(33984 + e), n.bindTexture(32879, r.__webglTexture)) + }, this.setTextureCube = v, this.setTextureCubeDynamic = y, this.setupRenderTarget = function(s) { + var c, d, f, v, y, b, _, T, A, L, C, P, E, N, O = i.get(s), + D = i.get(s.texture); + if (s.addEventListener("dispose", m), D.__webglTexture = t.createTexture(), a.memory.textures++, c = 1 == s.isWebGLRenderTargetCube, d = 1 == s.isWebGLMultisampleRenderTarget, f = 1 == s.isWebGLMultiviewRenderTarget, v = l(s) || r.isWebGL2, c) + for (O.__webglFramebuffer = [], y = 0; y < 6; y++) O.__webglFramebuffer[y] = t.createFramebuffer(); + else if (O.__webglFramebuffer = t.createFramebuffer(), d) r.isWebGL2 && (O.__webglMultisampledFramebuffer = t.createFramebuffer(), O.__webglColorRenderbuffer = t.createRenderbuffer(), t.bindRenderbuffer(36161, O.__webglColorRenderbuffer), b = p(o.convert(s.texture.format), o.convert(s.texture.type)), _ = S(s), t.renderbufferStorageMultisample(36161, _, b, s.width, s.height), t.bindFramebuffer(36160, O.__webglMultisampledFramebuffer), t.framebufferRenderbuffer(36160, 36064, 36161, O.__webglColorRenderbuffer), t.bindRenderbuffer(36161, null), s.depthBuffer && (O.__webglDepthRenderbuffer = t.createRenderbuffer(), M(O.__webglDepthRenderbuffer, s, 1)), t.bindFramebuffer(36160, null)); + else if (f) { + for (T = s.width, A = s.height, L = s.numViews, t.bindFramebuffer(36160, O.__webglFramebuffer), C = e.get("OVR_multiview2"), a.memory.textures += 2, P = t.createTexture(), t.bindTexture(35866, P), t.texParameteri(35866, 10240, 9728), t.texParameteri(35866, 10241, 9728), t.texImage3D(35866, 0, 32856, T, A, L, 0, 6408, 5121, null), C.framebufferTextureMultiviewOVR(36160, 36064, P, 0, 0, L), E = t.createTexture(), t.bindTexture(35866, E), t.texParameteri(35866, 10240, 9728), t.texParameteri(35866, 10241, 9728), t.texImage3D(35866, 0, 35056, T, A, L, 0, 34041, 34042, null), C.framebufferTextureMultiviewOVR(36160, 33306, E, 0, 0, L), N = Array(L), y = 0; y < L; ++y) N[y] = t.createFramebuffer(), t.bindFramebuffer(36160, N[y]), t.framebufferTextureLayer(36160, 36064, P, 0, y); + O.__webglColorTexture = P, O.__webglDepthStencilTexture = E, O.__webglViewFramebuffers = N, t.bindFramebuffer(36160, null), t.bindTexture(35866, null) + } + if (c) { + for (n.bindTexture(34067, D.__webglTexture), x(34067, s.texture, v), y = 0; y < 6; y++) w(O.__webglFramebuffer[y], s, 36064, 34069 + y); + u(s.texture, v) && h(34067, s.texture, s.width, s.height), n.bindTexture(34067, null) + } else f || (n.bindTexture(3553, D.__webglTexture), x(3553, s.texture, v), w(O.__webglFramebuffer, s, 36064, 3553), u(s.texture, v) && h(3553, s.texture, s.width, s.height), n.bindTexture(3553, null)); + s.depthBuffer && function(e) { + var n, r = i.get(e), + o = 1 == e.isWebGLRenderTargetCube; + if (e.depthTexture) { + if (o) throw Error("target.depthTexture not supported in Cube render targets"); + ! function(e, n) { + var r; + if (n && n.isWebGLRenderTargetCube) throw Error("Depth Texture with cube render targets is not supported"); + if (t.bindFramebuffer(36160, e), !n.depthTexture || !n.depthTexture.isDepthTexture) throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture"); + if (i.get(n.depthTexture).__webglTexture && n.depthTexture.image.width === n.width && n.depthTexture.image.height === n.height || (n.depthTexture.image.width = n.width, n.depthTexture.image.height = n.height, n.depthTexture.needsUpdate = 1), g(n.depthTexture, 0), r = i.get(n.depthTexture).__webglTexture, n.depthTexture.format === us) t.framebufferTexture2D(36160, 36096, 3553, r, 0); + else { + if (n.depthTexture.format !== hs) throw Error("Unknown depthTexture format"); + t.framebufferTexture2D(36160, 33306, 3553, r, 0) + } + }(r.__webglFramebuffer, e) + } else if (o) + for (r.__webglDepthbuffer = [], n = 0; n < 6; n++) t.bindFramebuffer(36160, r.__webglFramebuffer[n]), r.__webglDepthbuffer[n] = t.createRenderbuffer(), M(r.__webglDepthbuffer[n], e); + else t.bindFramebuffer(36160, r.__webglFramebuffer), r.__webglDepthbuffer = t.createRenderbuffer(), M(r.__webglDepthbuffer, e); + t.bindFramebuffer(36160, null) + }(s) + }, this.updateRenderTargetMipmap = function(t) { + var e, o, a = t.texture; + u(a, l(t) || r.isWebGL2) && (e = t.isWebGLRenderTargetCube ? 34067 : 3553, o = i.get(a).__webglTexture, n.bindTexture(e, o), h(e, a, t.width, t.height), n.bindTexture(e, null)) + }, this.updateMultisampleRenderTarget = function(e) { + var n, o, a, s; + e.isWebGLMultisampleRenderTarget && r.isWebGL2 && (n = i.get(e), t.bindFramebuffer(36008, n.__webglMultisampledFramebuffer), t.bindFramebuffer(36009, n.__webglFramebuffer), o = e.width, a = e.height, s = 16384, e.depthBuffer && (s |= 256), e.stencilBuffer && (s |= 1024), t.blitFramebuffer(0, 0, o, a, 0, 0, o, a, s, 9728)) + }, this.safeSetTexture2D = function(t, e) { + t && t.isWebGLRenderTarget && (0 == P && (P = 1), t = t.texture), g(t, e) + }, this.safeSetTextureCube = function(t, e) { + t && t.isWebGLRenderTargetCube && (0 == E && (E = 1), t = t.texture), t && t.isCubeTexture || Array.isArray(t.image) && 6 === t.image.length ? v(t, e) : y(t, e) + } + } + + function Ne(t, e, n) { + return { + convert: function(t) { + var i; + if (t === ka) return 10497; + if (t === Ba) return 33071; + if (t === Ua) return 33648; + if (t === ja) return 9728; + if (t === Va) return 9984; + if (t === Ga) return 9986; + if (t === Wa) return 9729; + if (t === Ha) return 9985; + if (t === qa) return 9987; + if (t === Xa) return 5121; + if (t === es) return 32819; + if (t === ns) return 32820; + if (t === is) return 33635; + if (t === Ya) return 5120; + if (t === Za) return 5122; + if (t === Ja) return 5123; + if (t === $a) return 5124; + if (t === Qa) return 5125; + if (t === Ka) return 5126; + if (t === ts) { + if (n.isWebGL2) return 5131; + if (null !== (i = e.get("OES_texture_half_float"))) return i.HALF_FLOAT_OES + } + if (t === os) return 6406; + if (t === as) return 6407; + if (t === ss) return 6408; + if (t === cs) return 6409; + if (t === ls) return 6410; + if (t === us) return 6402; + if (t === hs) return 34041; + if (t === ps) return 6403; + if (t === Qo) return 32774; + if (t === Ko) return 32778; + if (t === ta) return 32779; + if (t === ia) return 0; + if (t === ra) return 1; + if (t === oa) return 768; + if (t === aa) return 769; + if (t === sa) return 770; + if (t === ca) return 771; + if (t === la) return 772; + if (t === ua) return 773; + if (t === ha) return 774; + if (t === pa) return 775; + if (t === da) return 776; + if ((t === ds || t === fs || t === ms || t === gs) && null !== (i = e.get("WEBGL_compressed_texture_s3tc"))) { + if (t === ds) return i.COMPRESSED_RGB_S3TC_DXT1_EXT; + if (t === fs) return i.COMPRESSED_RGBA_S3TC_DXT1_EXT; + if (t === ms) return i.COMPRESSED_RGBA_S3TC_DXT3_EXT; + if (t === gs) return i.COMPRESSED_RGBA_S3TC_DXT5_EXT + } + if ((t === vs || t === ys || t === xs || t === bs) && null !== (i = e.get("WEBGL_compressed_texture_pvrtc"))) { + if (t === vs) return i.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; + if (t === ys) return i.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; + if (t === xs) return i.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; + if (t === bs) return i.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG + } + if (t === _s && null !== (i = e.get("WEBGL_compressed_texture_etc1"))) return i.COMPRESSED_RGB_ETC1_WEBGL; + if ((t === ws || t === Ms || t === Ss || t === Ts || t === As || t === Ls || t === Cs || t === Ps || t === Es || t === Ns || t === Os || t === Ds || t === Is || t === zs) && null !== (i = e.get("WEBGL_compressed_texture_astc"))) return t; + if (t === ea || t === na) { + if (n.isWebGL2) { + if (t === ea) return 32775; + if (t === na) return 32776 + } + if (null !== (i = e.get("EXT_blend_minmax"))) { + if (t === ea) return i.MIN_EXT; + if (t === na) return i.MAX_EXT + } + } + if (t === rs) { + if (n.isWebGL2) return 34042; + if (null !== (i = e.get("WEBGL_depth_texture"))) return i.UNSIGNED_INT_24_8_WEBGL + } + return 0 + } + } + } + + function Oe(t, e, n, i) { + s.call(this, t, e, i), this.depthBuffer = 0, this.stencilBuffer = 0, this.numViews = n + } + + function De(t, n) { + function i(t) { + return t.isArrayCamera ? t.cameras : (u[0] = t, u) + } + var o, a, s, c, u, h, p, d = t.extensions, + f = t.properties, + m = 0; + this.isAvailable = function() { + var t, i; + if (void 0 === p && (t = d.get("OVR_multiview2"), p = null !== t && 0 == n.getContextAttributes().antialias)) + for (m = n.getParameter(t.MAX_VIEWS_OVR), o = new Oe(0, 0, 2), h = new e, c = [], s = [], u = [], i = 0; i < m; i++) c[i] = new l, s[i] = new r; + return p + }, this.attachCamera = function(e) { + 0 != function(t) { + var e, n, i; + if (void 0 === t.isArrayCamera) return 1; + if ((e = t.cameras).length > m) return 0; + for (n = 1, i = e.length; n < i; n++) + if (e[0].viewport.z !== e[n].viewport.z || e[0].viewport.w !== e[n].viewport.w) return 0; + return 1 + }(e) && (a = t.getRenderTarget(), function(e) { + if (a ? h.set(a.width, a.height) : t.getDrawingBufferSize(h), e.isArrayCamera) { + var n = e.cameras[0].viewport; + o.setSize(n.z, n.w), o.setNumViews(e.cameras.length) + } else o.setSize(h.x, h.y), o.setNumViews(2) + }(e), t.setRenderTarget(o)) + }, this.detachCamera = function(e) { + o === t.getRenderTarget() && (t.setRenderTarget(a), function(t) { + var e, i, r, a, s, c, l = o, + u = l.numViews, + p = f.get(l).__webglViewFramebuffers, + d = l.width, + m = l.height; + if (t.isArrayCamera) + for (e = 0; e < u; e++) r = (i = t.cameras[e].viewport).x, a = i.y, s = r + i.z, c = a + i.w, n.bindFramebuffer(36008, p[e]), n.blitFramebuffer(0, 0, d, m, r, a, s, c, 16384, 9728); + else n.bindFramebuffer(36008, p[0]), n.blitFramebuffer(0, 0, d, m, 0, 0, h.x, h.y, 16384, 9728) + }(e)) + }, this.updateCameraProjectionMatricesUniform = function(t, e) { + var r, o = i(t); + for (r = 0; r < o.length; r++) c[r].copy(o[r].projectionMatrix); + e.setValue(n, "projectionMatrices", c) + }, this.updateCameraViewMatricesUniform = function(t, e) { + var r, o = i(t); + for (r = 0; r < o.length; r++) c[r].copy(o[r].matrixWorldInverse); + e.setValue(n, "viewMatrices", c) + }, this.updateObjectMatricesUniforms = function(t, e, r) { + var o, a = i(e); + for (o = 0; o < a.length; o++) c[o].multiplyMatrices(a[o].matrixWorldInverse, t.matrixWorld), s[o].getNormalMatrix(c[o]); + r.setValue(n, "modelViewMatrices", c), r.setValue(n, "normalMatrices", s) + } + } + + function Ie() { + p.call(this), this.type = "Group" + } + + function ze(t) { + X.call(this), this.cameras = t || [] + } + + function Re(t, e, n) { + var i, r, o, a, s, c, l, u, h, p, d, f, m, g, v, y, x, b, _; + fu.setFromMatrixPosition(e.matrixWorld), mu.setFromMatrixPosition(n.matrixWorld), i = fu.distanceTo(mu), r = e.projectionMatrix.elements, o = n.projectionMatrix.elements, a = r[14] / (r[10] - 1), s = r[14] / (r[10] + 1), c = (r[9] + 1) / r[5], l = (r[9] - 1) / r[5], p = a * (u = (r[8] - 1) / r[0]), d = a * (h = (o[8] + 1) / o[0]), m = (f = i / (-u + h)) * -u, e.matrixWorld.decompose(t.position, t.quaternion, t.scale), t.translateX(m), t.translateZ(f), t.matrixWorld.compose(t.position, t.quaternion, t.scale), t.matrixWorldInverse.getInverse(t.matrixWorld), y = p - m, x = d + (i - m), b = c * s / (v = s + f) * (g = a + f), _ = l * s / v * g, t.projectionMatrix.makePerspective(y, x, b, _, g, v) + } + + function Fe(t) { + function r() { + return null !== M && 1 == M.isPresenting + } + + function o() { + if (r()) { + var e = M.getEyeParameters("left"); + u = 2 * e.renderWidth * P, h = e.renderHeight * P, x = t.getPixelRatio(), t.getSize(y), t.setDrawingBufferSize(u, h, 1), m.viewport.set(0, 0, u / 2, h), g.viewport.set(u / 2, 0, u / 2, h), _.start(), w.dispatchEvent({ + type: "sessionstart" + }) + } else w.enabled && t.setDrawingBufferSize(y.width, y.height, x), _.stop(), w.dispatchEvent({ + type: "sessionend" + }) + } + + function s(t) { + var e, n, i, r, o = navigator.getGamepads && navigator.getGamepads(); + for (e = 0, n = 0, i = o.length; e < i; e++) + if ((r = o[e]) && ("Daydream Controller" === r.id || "Gear VR Controller" === r.id || "Oculus Go Controller" === r.id || "OpenVR Gamepad" === r.id || r.id.startsWith("Oculus Touch") || r.id.startsWith("HTC Vive Focus") || r.id.startsWith("Spatial Controller"))) { + if (n === t) return r; + n++ + } + } + + function c(t, e) { + null !== e && 4 === e.length && t.set(e[0] * u, e[1] * h, e[2] * u, e[3] * h) + } + var u, h, p, d, f, m, g, v, y, x, b, _, w = this, + M = null, + S = null, + T = null, + A = [], + L = new l, + C = new l, + P = 1, + E = "local-floor"; + "undefined" != typeof window && "VRFrameData" in window && (S = new window.VRFrameData, window.addEventListener("vrdisplaypresentchange", o, 0)), p = new l, d = new n, f = new i, (m = new X).viewport = new a, m.layers.enable(1), (g = new X).viewport = new a, g.layers.enable(2), (v = new ze([m, g])).layers.enable(1), v.layers.enable(2), y = new e, b = [], this.enabled = 0, this.getController = function(t) { + var e = A[t]; + return void 0 === e && ((e = new Ie).matrixAutoUpdate = 0, e.visible = 0, A[t] = e), e + }, this.getDevice = function() { + return M + }, this.setDevice = function(t) { + void 0 !== t && (M = t), _.setContext(t) + }, this.setFramebufferScaleFactor = function(t) { + P = t + }, this.setReferenceSpaceType = function(t) { + E = t + }, this.setPoseTarget = function(t) { + void 0 !== t && (T = t) + }, this.getCamera = function(t) { + var e, n, i, o, a, l, u = "local-floor" === E ? 1.6 : 0; + return 0 == r() ? (t.position.set(0, u, 0), t.rotation.set(0, 0, 0), t) : (M.depthNear = t.near, M.depthFar = t.far, M.getFrameData(S), "local-floor" === E && ((e = M.stageParameters) ? L.fromArray(e.sittingToStandingTransform) : L.makeTranslation(0, u, 0)), n = S.pose, (i = null !== T ? T : t).matrix.copy(L), i.matrix.decompose(i.position, i.quaternion, i.scale), null !== n.orientation && (d.fromArray(n.orientation), i.quaternion.multiply(d)), null !== n.position && (d.setFromRotationMatrix(L), f.fromArray(n.position), f.applyQuaternion(d), i.position.add(f)), i.updateMatrixWorld(), m.near = t.near, g.near = t.near, m.far = t.far, g.far = t.far, m.matrixWorldInverse.fromArray(S.leftViewMatrix), g.matrixWorldInverse.fromArray(S.rightViewMatrix), C.getInverse(L), "local-floor" === E && (m.matrixWorldInverse.multiply(C), g.matrixWorldInverse.multiply(C)), null !== (o = i.parent) && (p.getInverse(o.matrixWorld), m.matrixWorldInverse.multiply(p), g.matrixWorldInverse.multiply(p)), m.matrixWorld.getInverse(m.matrixWorldInverse), g.matrixWorld.getInverse(g.matrixWorldInverse), m.projectionMatrix.fromArray(S.leftProjectionMatrix), g.projectionMatrix.fromArray(S.rightProjectionMatrix), Re(v, m, g), (a = M.getLayers()).length && (l = a[0], c(m.viewport, l.leftBounds), c(g.viewport, l.rightBounds)), function() { + var t, e, n, i, r; + for (t = 0; t < A.length; t++) + if (e = A[t], void 0 !== (n = s(t)) && void 0 !== n.pose) { + if (null === n.pose) return; + 0 == (i = n.pose).hasPosition && e.position.set(.2, -.6, -.05), null !== i.position && e.position.fromArray(i.position), null !== i.orientation && e.quaternion.fromArray(i.orientation), e.matrix.compose(e.position, e.quaternion, e.scale), e.matrix.premultiply(L), e.matrix.decompose(e.position, e.quaternion, e.scale), e.matrixWorldNeedsUpdate = 1, e.visible = 1, r = "Daydream Controller" === n.id ? 0 : 1, void 0 === b[t] && (b[t] = 0), b[t] !== n.buttons[r].pressed && (b[t] = n.buttons[r].pressed, 1 == b[t] ? e.dispatchEvent({ + type: "selectstart" + }) : (e.dispatchEvent({ + type: "selectend" + }), e.dispatchEvent({ + type: "select" + }))) + } else e.visible = 0 + }(), v) + }, this.getStandingMatrix = function() { + return L + }, this.isPresenting = r, _ = new K, this.setAnimationLoop = function(t) { + _.setAnimationLoop(t), r() && _.start() + }, this.submitFrame = function() { + r() && M.submitFrame() + }, this.dispose = function() { + "undefined" != typeof window && window.removeEventListener("vrdisplaypresentchange", o) + }, this.setFrameOfReferenceType = function() {} + } + + function ke(t, e) { + function n() { + return null !== f && null !== m + } + + function i(t) { + for (var e = 0; e < y.length; e++) x[e] === t.inputSource && y[e].dispatchEvent({ + type: t.type + }) + } + + function r() { + t.setFramebuffer(null), t.setRenderTarget(t.getRenderTarget()), p.stop(), d.dispatchEvent({ + type: "sessionend" + }) + } + + function o(t) { + m = t, p.setContext(f), p.start(), d.dispatchEvent({ + type: "sessionstart" + }) + } + + function s(t, e) { + null === e ? t.matrixWorld.copy(t.matrix) : t.matrixWorld.multiplyMatrices(e.matrixWorld, t.matrix), t.matrixWorldInverse.getInverse(t.matrixWorld) + } + var c, u, h, p, d = this, + f = null, + m = null, + g = "local-floor", + v = null, + y = [], + x = [], + b = new X; + b.layers.enable(1), b.viewport = new a, (c = new X).layers.enable(2), c.viewport = new a, (u = new ze([b, c])).layers.enable(1), u.layers.enable(2), this.enabled = 0, this.getController = function(t) { + var e = y[t]; + return void 0 === e && ((e = new Ie).matrixAutoUpdate = 0, e.visible = 0, y[t] = e), e + }, this.setFramebufferScaleFactor = function() {}, this.setReferenceSpaceType = function(t) { + g = t + }, this.getSession = function() { + return f + }, this.setSession = function(t) { + null !== (f = t) && (f.addEventListener("select", i), f.addEventListener("selectstart", i), f.addEventListener("selectend", i), f.addEventListener("end", r), f.updateRenderState({ + baseLayer: new XRWebGLLayer(f, e) + }), f.requestReferenceSpace(g).then(o), x = f.inputSources, f.addEventListener("inputsourceschange", function() { + var t; + for (x = f.inputSources, t = 0; t < y.length; t++) y[t].userData.inputSource = x[t] + })) + }, this.getCamera = function(t) { + var e, i, r, o, a; + if (n()) { + for (e = t.parent, i = u.cameras, s(u, e), r = 0; r < i.length; r++) s(i[r], e); + for (t.matrixWorld.copy(u.matrixWorld), r = 0, a = (o = t.children).length; r < a; r++) o[r].updateMatrixWorld(1); + return Re(u, b, c), u + } + return t + }, this.isPresenting = n, h = null, (p = new K).setAnimationLoop(function(e, n) { + var i, r, o, a, s, c, l, p, d, g; + if (null !== (v = n.getViewerPose(m))) + for (i = v.views, r = f.renderState.baseLayer, t.setFramebuffer(r.framebuffer), o = 0; o < i.length; o++) a = i[o], s = r.getViewport(a), c = a.transform.inverse.matrix, (l = u.cameras[o]).matrix.fromArray(c).getInverse(l.matrix), l.projectionMatrix.fromArray(a.projectionMatrix), l.viewport.set(s.x, s.y, s.width, s.height), 0 === o && u.matrix.copy(l.matrix); + for (o = 0; o < y.length; o++) p = y[o], (d = x[o]) && null !== (g = n.getPose(d.targetRaySpace, m)) ? (p.matrix.fromArray(g.transform.matrix), p.matrix.decompose(p.position, p.rotation, p.scale), p.visible = 1) : p.visible = 0; + h && h(e) + }), this.setAnimationLoop = function(t) { + h = t + }, this.dispose = function() {}, this.getStandingMatrix = function() { + return new l + }, this.getDevice = function() {}, this.setDevice = function() {}, this.setFrameOfReferenceType = function() {}, this.submitFrame = function() {} + } + + function Be(t) { + function n() { + return null === z ? X : 1 + } + + function r() { + xt = new st(vt), 0 == (bt = new ot(vt, xt, t)).isWebGL2 && (xt.get("WEBGL_depth_texture"), xt.get("OES_texture_float"), xt.get("OES_texture_half_float"), xt.get("OES_texture_half_float_linear"), xt.get("OES_standard_derivatives"), xt.get("OES_element_index_uint"), xt.get("ANGLE_instanced_arrays")), xt.get("OES_texture_float_linear"), zt = new Ne(vt, xt, bt), (_t = new Pe(vt, xt, zt, bt)).scissor(V.copy(Z).multiplyScalar(X).floor()), _t.viewport(j.copy(Y).multiplyScalar(X).floor()), wt = new ut(vt), Mt = new ge, St = new Ee(vt, xt, _t, Mt, bt, zt, wt), Tt = new tt(vt), At = new ct(vt, Tt, wt), Lt = new dt(vt, At, Tt, wt), Ot = new pt(vt), Ct = new me(E, xt, bt), Pt = new be, Et = new Te, Nt = new it(E, _t, Lt, S), Dt = new rt(vt, xt, wt, bt), It = new lt(vt, xt, wt, bt), wt.programs = Ct.programs, E.capabilities = bt, E.extensions = xt, E.properties = Mt, E.renderLists = Pt, E.state = _t, E.info = wt + } + + function o(t) { + t.preventDefault(), N = 1 + } + + function s() { + N = 0, r() + } + + function c(t) { + var e = t.target; + e.removeEventListener("dispose", c), + function(t) { + u(t), Mt.remove(t) + }(e) + } + + function u(t) { + var e = Mt.get(t).program; + t.program = void 0, void 0 !== e && Ct.releaseProgram(e) + } + + function h(t, e, n, i) { + var r, o, a, s, c, l, u, h, d, f, m; + for (r = 0, o = t.length; r < o; r++) + if (s = (a = t[r]).object, c = a.geometry, l = void 0 === i ? a.material : i, u = a.group, n.isArrayCamera) + if (U = n, Rt.enabled && Ft.isAvailable()) p(s, e, n, c, l, u); + else + for (d = 0, f = (h = n.cameras).length; d < f; d++) m = h[d], s.layers.test(m.layers) && (_t.viewport(j.copy(m.viewport)), P.setupLights(m), p(s, e, m, c, l, u)); + else U = null, p(s, e, n, c, l, u) + } + + function p(t, e, n, i, r, o) { + if (t.onBeforeRender(E, e, n, i, r, o), P = Et.get(e, U || n), t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse, t.matrixWorld), t.normalMatrix.getNormalMatrix(t.modelViewMatrix), t.isImmediateRenderObject) { + _t.setMaterial(r); + var a = f(n, e.fog, r, t); + k.geometry = null, k.program = null, k.wireframe = 0, + function(t, e) { + t.render(function(t) { + E.renderBufferImmediate(t, e) + }) + }(t, a) + } else E.renderBufferDirect(n, e.fog, i, r, t, o); + t.onAfterRender(E, e, n, i, r, o), P = Et.get(e, U || n) + } + + function d(t, e, n) { + var i, r, o, a, s, l, h = Mt.get(t), + p = P.state.lights, + d = P.state.shadowsArray, + f = p.state.version, + m = Ct.getParameters(t, p.state, d, e, nt.numPlanes, nt.numIntersection, n), + g = Ct.getProgramCode(t, m), + v = h.program, + y = 1; + if (void 0 === v) t.addEventListener("dispose", c); + else if (v.code !== g) u(t); + else if (h.lightsStateVersion !== f) h.lightsStateVersion = f, y = 0; + else { + if (void 0 !== m.shaderID) return; + y = 0 + } + if (y && (m.shaderID ? (i = $l[m.shaderID], h.shader = { + name: t.type, + uniforms: G(i.uniforms), + vertexShader: i.vertexShader, + fragmentShader: i.fragmentShader + }) : h.shader = { + name: t.type, + uniforms: t.uniforms, + vertexShader: t.vertexShader, + fragmentShader: t.fragmentShader + }, t.onBeforeCompile(h.shader, E), g = Ct.getProgramCode(t, m), v = Ct.acquireProgram(t, h.shader, m, g), h.program = v, t.program = v), r = v.getAttributes(), t.morphTargets) + for (t.numSupportedMorphTargets = 0, o = 0; o < E.maxMorphTargets; o++) r["morphTarget" + o] >= 0 && t.numSupportedMorphTargets++; + if (t.morphNormals) + for (t.numSupportedMorphNormals = 0, o = 0; o < E.maxMorphNormals; o++) r["morphNormal" + o] >= 0 && t.numSupportedMorphNormals++; + a = h.shader.uniforms, (t.isShaderMaterial || t.isRawShaderMaterial) && 1 != t.clipping || (h.numClippingPlanes = nt.numPlanes, h.numIntersection = nt.numIntersection, a.clippingPlanes = nt.uniform), h.fog = e, h.needsLights = function(t) { + return t.isMeshLambertMaterial || t.isMeshPhongMaterial || t.isMeshStandardMaterial || t.isShadowMaterial || t.isShaderMaterial && 1 == t.lights + }(t), h.lightsStateVersion = f, h.needsLights && (a.ambientLightColor.value = p.state.ambient, a.lightProbe.value = p.state.probe, a.directionalLights.value = p.state.directional, a.spotLights.value = p.state.spot, a.rectAreaLights.value = p.state.rectArea, a.pointLights.value = p.state.point, a.hemisphereLights.value = p.state.hemi, a.directionalShadowMap.value = p.state.directionalShadowMap, a.directionalShadowMatrix.value = p.state.directionalShadowMatrix, a.spotShadowMap.value = p.state.spotShadowMap, a.spotShadowMatrix.value = p.state.spotShadowMatrix, a.pointShadowMap.value = p.state.pointShadowMap, a.pointShadowMatrix.value = p.state.pointShadowMatrix), s = h.program.getUniforms(), l = te.seqWithValue(s.seq, a), h.uniformsList = l + } + + function f(t, e, n, i) { + var r, o, a, s, c, l, u, h, p, f, y, x, b, _, w, M, S; + return St.resetTextureUnits(), r = Mt.get(n), o = P.state.lights, ht && (ft || t !== B) && (a = t === B && n.id === F, nt.setState(n.clippingPlanes, n.clipIntersection, n.clipShadows, t, r, a)), 0 == n.needsUpdate && (void 0 === r.program ? n.needsUpdate = 1 : n.fog && r.fog !== e ? n.needsUpdate = 1 : r.needsLights && r.lightsStateVersion !== o.state.version ? n.needsUpdate = 1 : void 0 === r.numClippingPlanes || r.numClippingPlanes === nt.numPlanes && r.numIntersection === nt.numIntersection || (n.needsUpdate = 1)), n.needsUpdate && (d(n, e, i), n.needsUpdate = 0), s = 0, c = 0, l = 0, h = (u = r.program).getUniforms(), p = r.shader.uniforms, _t.useProgram(u.program) && (s = 1, c = 1, l = 1), n.id !== F && (F = n.id, c = 1), (s || B !== t) && (u.numMultiviewViews > 0 ? Ft.updateCameraProjectionMatricesUniform(t, h) : h.setValue(vt, "projectionMatrix", t.projectionMatrix), bt.logarithmicDepthBuffer && h.setValue(vt, "logDepthBufFC", 2 / (Math.log(t.far + 1) / Math.LN2)), B !== t && (B = t, c = 1, l = 1), (n.isShaderMaterial || n.isMeshPhongMaterial || n.isMeshStandardMaterial || n.envMap) && void 0 !== (f = h.map.cameraPosition) && f.setValue(vt, gt.setFromMatrixPosition(t.matrixWorld)), (n.isMeshPhongMaterial || n.isMeshLambertMaterial || n.isMeshBasicMaterial || n.isMeshStandardMaterial || n.isShaderMaterial || n.skinning) && (u.numMultiviewViews > 0 ? Ft.updateCameraViewMatricesUniform(t, h) : h.setValue(vt, "viewMatrix", t.matrixWorldInverse))), n.skinning && (h.setOptional(vt, i, "bindMatrix"), h.setOptional(vt, i, "bindMatrixInverse"), (y = i.skeleton) && (x = y.bones, bt.floatVertexTextures ? (void 0 === y.boneTexture && (b = Math.sqrt(4 * x.length), b = ic.ceilPowerOfTwo(b), b = Math.max(b, 4), (_ = new Float32Array(b * b * 4)).set(y.boneMatrices), w = new J(_, b, b, ss, Ka), y.boneMatrices = _, y.boneTexture = w, y.boneTextureSize = b), h.setValue(vt, "boneTexture", y.boneTexture, St), h.setValue(vt, "boneTextureSize", y.boneTextureSize)) : h.setOptional(vt, y, "boneMatrices"))), (c || r.receiveShadow !== i.receiveShadow) && (r.receiveShadow = i.receiveShadow, h.setValue(vt, "receiveShadow", i.receiveShadow)), c && (h.setValue(vt, "toneMappingExposure", E.toneMappingExposure), h.setValue(vt, "toneMappingWhitePoint", E.toneMappingWhitePoint), r.needsLights && (S = l, (M = p).ambientLightColor.needsUpdate = S, M.lightProbe.needsUpdate = S, M.directionalLights.needsUpdate = S, M.pointLights.needsUpdate = S, M.spotLights.needsUpdate = S, M.rectAreaLights.needsUpdate = S, M.hemisphereLights.needsUpdate = S), e && n.fog && function(t, e) { + t.fogColor.value.copy(e.color), e.isFog ? (t.fogNear.value = e.near, t.fogFar.value = e.far) : e.isFogExp2 && (t.fogDensity.value = e.density) + }(p, e), n.isMeshBasicMaterial ? m(p, n) : n.isMeshLambertMaterial ? (m(p, n), function(t, e) { + e.emissiveMap && (t.emissiveMap.value = e.emissiveMap) + }(p, n)) : n.isMeshPhongMaterial ? (m(p, n), n.isMeshToonMaterial ? function(t, e) { + g(t, e), e.gradientMap && (t.gradientMap.value = e.gradientMap) + }(p, n) : g(p, n)) : n.isMeshStandardMaterial ? (m(p, n), n.isMeshPhysicalMaterial ? function(t, e) { + v(t, e), t.reflectivity.value = e.reflectivity, t.clearcoat.value = e.clearcoat, t.clearcoatRoughness.value = e.clearcoatRoughness, e.sheen && t.sheen.value.copy(e.sheen), e.clearcoatNormalMap && (t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale), t.clearcoatNormalMap.value = e.clearcoatNormalMap, e.side === jo && t.clearcoatNormalScale.value.negate()), t.transparency.value = e.transparency + }(p, n) : v(p, n)) : n.isMeshMatcapMaterial ? (m(p, n), function(t, e) { + e.matcap && (t.matcap.value = e.matcap), e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, e.side === jo && (t.bumpScale.value *= -1)), e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), e.side === jo && t.normalScale.value.negate()), e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) + }(p, n)) : n.isMeshDepthMaterial ? (m(p, n), function(t, e) { + e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) + }(p, n)) : n.isMeshDistanceMaterial ? (m(p, n), function(t, e) { + e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias), t.referencePosition.value.copy(e.referencePosition), t.nearDistance.value = e.nearDistance, t.farDistance.value = e.farDistance + }(p, n)) : n.isMeshNormalMaterial ? (m(p, n), function(t, e) { + e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, e.side === jo && (t.bumpScale.value *= -1)), e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), e.side === jo && t.normalScale.value.negate()), e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) + }(p, n)) : n.isLineBasicMaterial ? (function(t, e) { + t.diffuse.value.copy(e.color), t.opacity.value = e.opacity + }(p, n), n.isLineDashedMaterial && function(t, e) { + t.dashSize.value = e.dashSize, t.totalSize.value = e.dashSize + e.gapSize, t.scale.value = e.scale + }(p, n)) : n.isPointsMaterial ? function(t, e) { + t.diffuse.value.copy(e.color), t.opacity.value = e.opacity, t.size.value = e.size * X, t.scale.value = .5 * q, t.map.value = e.map, null !== e.map && (1 == e.map.matrixAutoUpdate && e.map.updateMatrix(), t.uvTransform.value.copy(e.map.matrix)) + }(p, n) : n.isSpriteMaterial ? function(t, e) { + t.diffuse.value.copy(e.color), t.opacity.value = e.opacity, t.rotation.value = e.rotation, t.map.value = e.map, null !== e.map && (1 == e.map.matrixAutoUpdate && e.map.updateMatrix(), t.uvTransform.value.copy(e.map.matrix)) + }(p, n) : n.isShadowMaterial && (p.color.value.copy(n.color), p.opacity.value = n.opacity), void 0 !== p.ltc_1 && (p.ltc_1.value = Jl.LTC_1), void 0 !== p.ltc_2 && (p.ltc_2.value = Jl.LTC_2), te.upload(vt, r.uniformsList, p, St)), n.isShaderMaterial && 1 == n.uniformsNeedUpdate && (te.upload(vt, r.uniformsList, p, St), n.uniformsNeedUpdate = 0), n.isSpriteMaterial && h.setValue(vt, "center", i.center), u.numMultiviewViews > 0 ? Ft.updateObjectMatricesUniforms(i, t, h) : (h.setValue(vt, "modelViewMatrix", i.modelViewMatrix), h.setValue(vt, "normalMatrix", i.normalMatrix)), h.setValue(vt, "modelMatrix", i.matrixWorld), u + } + + function m(t, e) { + var n; + t.opacity.value = e.opacity, e.color && t.diffuse.value.copy(e.color), e.emissive && t.emissive.value.copy(e.emissive).multiplyScalar(e.emissiveIntensity), e.map && (t.map.value = e.map), e.alphaMap && (t.alphaMap.value = e.alphaMap), e.specularMap && (t.specularMap.value = e.specularMap), e.envMap && (t.envMap.value = e.envMap, t.flipEnvMap.value = e.envMap.isCubeTexture ? -1 : 1, t.reflectivity.value = e.reflectivity, t.refractionRatio.value = e.refractionRatio, t.maxMipLevel.value = Mt.get(e.envMap).__maxMipLevel), e.lightMap && (t.lightMap.value = e.lightMap, t.lightMapIntensity.value = e.lightMapIntensity), e.aoMap && (t.aoMap.value = e.aoMap, t.aoMapIntensity.value = e.aoMapIntensity), e.map ? n = e.map : e.specularMap ? n = e.specularMap : e.displacementMap ? n = e.displacementMap : e.normalMap ? n = e.normalMap : e.bumpMap ? n = e.bumpMap : e.roughnessMap ? n = e.roughnessMap : e.metalnessMap ? n = e.metalnessMap : e.alphaMap ? n = e.alphaMap : e.emissiveMap && (n = e.emissiveMap), void 0 !== n && (n.isWebGLRenderTarget && (n = n.texture), 1 == n.matrixAutoUpdate && n.updateMatrix(), t.uvTransform.value.copy(n.matrix)) + } + + function g(t, e) { + t.specular.value.copy(e.specular), t.shininess.value = Math.max(e.shininess, 1e-4), e.emissiveMap && (t.emissiveMap.value = e.emissiveMap), e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, e.side === jo && (t.bumpScale.value *= -1)), e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), e.side === jo && t.normalScale.value.negate()), e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) + } + + function v(t, e) { + t.roughness.value = e.roughness, t.metalness.value = e.metalness, e.roughnessMap && (t.roughnessMap.value = e.roughnessMap), e.metalnessMap && (t.metalnessMap.value = e.metalnessMap), e.emissiveMap && (t.emissiveMap.value = e.emissiveMap), e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, e.side === jo && (t.bumpScale.value *= -1)), e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), e.side === jo && t.normalScale.value.negate()), e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias), e.envMap && (t.envMapIntensity.value = e.envMapIntensity) + } + var y, x, b, _, w, M, S, T, A, L, C, P, E, N, O, D, I, z, R, F, k, B, U, j, V, W, H, q, X, Y, Z, $, et, nt, ht, ft, mt, gt, vt, yt, xt, bt, _t, wt, Mt, St, Tt, At, Lt, Ct, Pt, Et, Nt, Ot, Dt, It, zt, Rt, Ft, kt, Bt, Ut; + y = void 0 !== (t = t || {}).canvas ? t.canvas : document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"), x = void 0 !== t.context ? t.context : null, b = void 0 !== t.alpha ? t.alpha : 0, _ = void 0 !== t.depth ? t.depth : 1, w = void 0 !== t.stencil ? t.stencil : 1, M = void 0 !== t.antialias ? t.antialias : 0, S = void 0 !== t.premultipliedAlpha ? t.premultipliedAlpha : 1, T = void 0 !== t.preserveDrawingBuffer ? t.preserveDrawingBuffer : 0, A = void 0 !== t.powerPreference ? t.powerPreference : "default", L = void 0 !== t.failIfMajorPerformanceCaveat ? t.failIfMajorPerformanceCaveat : 0, C = null, P = null, this.domElement = y, this.debug = { + checkShaderErrors: 1 + }, this.autoClear = 1, this.autoClearColor = 1, this.autoClearDepth = 1, this.autoClearStencil = 1, this.sortObjects = 1, this.clippingPlanes = [], this.localClippingEnabled = 0, this.gammaFactor = 2, this.gammaInput = 0, this.gammaOutput = 0, this.physicallyCorrectLights = 0, this.toneMapping = Aa, this.toneMappingExposure = 1, this.toneMappingWhitePoint = 1, this.maxMorphTargets = 8, this.maxMorphNormals = 4, E = this, N = 0, O = null, D = 0, I = 0, z = null, R = null, F = -1, k = { + geometry: null, + program: null, + wireframe: 0 + }, B = null, U = null, j = new a, V = new a, W = null, H = y.width, q = y.height, X = 1, Y = new a(0, 0, H, q), Z = new a(0, 0, H, q), $ = 0, et = new Q, nt = new at, ht = 0, ft = 0, mt = new l, gt = new i; + try { + if (yt = { + alpha: b, + depth: _, + stencil: w, + antialias: M, + premultipliedAlpha: S, + preserveDrawingBuffer: T, + powerPreference: A, + failIfMajorPerformanceCaveat: L, + xrCompatible: 1 + }, y.addEventListener("webglcontextlost", o, 0), y.addEventListener("webglcontextrestored", s, 0), null === (vt = x || y.getContext("webgl", yt) || y.getContext("experimental-webgl", yt))) throw null !== y.getContext("webgl") ? Error("Error creating WebGL context with your selected attributes.") : Error("Error creating WebGL context."); + void 0 === vt.getShaderPrecisionFormat && (vt.getShaderPrecisionFormat = function() { + return { + rangeMin: 1, + rangeMax: 1, + precision: 1 + } + }) + } catch (t) { + throw t + } + r(), Rt = "undefined" != typeof navigator && "xr" in navigator && "supportsSession" in navigator.xr ? new ke(E, vt) : new Fe(E), this.vr = Rt, Ft = new De(E, vt), kt = new Ce(E, Lt, bt.maxTextureSize), this.shadowMap = kt, this.getContext = function() { + return vt + }, this.getContextAttributes = function() { + return vt.getContextAttributes() + }, this.forceContextLoss = function() { + var t = xt.get("WEBGL_lose_context"); + t && t.loseContext() + }, this.forceContextRestore = function() { + var t = xt.get("WEBGL_lose_context"); + t && t.restoreContext() + }, this.getPixelRatio = function() { + return X + }, this.setPixelRatio = function(t) { + void 0 !== t && (X = t, this.setSize(H, q, 0)) + }, this.getSize = function(t) { + return void 0 === t && (t = new e), t.set(H, q) + }, this.setSize = function(t, e, n) { + Rt.isPresenting() || (H = t, q = e, y.width = Math.floor(t * X), y.height = Math.floor(e * X), 0 != n && (y.style.width = t + "px", y.style.height = e + "px"), this.setViewport(0, 0, t, e)) + }, this.getDrawingBufferSize = function(t) { + return void 0 === t && (t = new e), t.set(H * X, q * X).floor() + }, this.setDrawingBufferSize = function(t, e, n) { + H = t, q = e, X = n, y.width = Math.floor(t * n), y.height = Math.floor(e * n), this.setViewport(0, 0, t, e) + }, this.getCurrentViewport = function(t) { + return void 0 === t && (t = new a), t.copy(j) + }, this.getViewport = function(t) { + return t.copy(Y) + }, this.setViewport = function(t, e, n, i) { + t.isVector4 ? Y.set(t.x, t.y, t.z, t.w) : Y.set(t, e, n, i), _t.viewport(j.copy(Y).multiplyScalar(X).floor()) + }, this.getScissor = function(t) { + return t.copy(Z) + }, this.setScissor = function(t, e, n, i) { + t.isVector4 ? Z.set(t.x, t.y, t.z, t.w) : Z.set(t, e, n, i), _t.scissor(V.copy(Z).multiplyScalar(X).floor()) + }, this.getScissorTest = function() { + return $ + }, this.setScissorTest = function(t) { + _t.setScissorTest($ = t) + }, this.getClearColor = function() { + return Nt.getClearColor() + }, this.setClearColor = function() { + Nt.setClearColor.apply(Nt, arguments) + }, this.getClearAlpha = function() { + return Nt.getClearAlpha() + }, this.setClearAlpha = function() { + Nt.setClearAlpha.apply(Nt, arguments) + }, this.clear = function(t, e, n) { + var i = 0; + (void 0 === t || t) && (i |= 16384), (void 0 === e || e) && (i |= 256), (void 0 === n || n) && (i |= 1024), vt.clear(i) + }, this.clearColor = function() { + this.clear(1, 0, 0) + }, this.clearDepth = function() { + this.clear(0, 1, 0) + }, this.clearStencil = function() { + this.clear(0, 0, 1) + }, this.dispose = function() { + y.removeEventListener("webglcontextlost", o, 0), y.removeEventListener("webglcontextrestored", s, 0), Pt.dispose(), Et.dispose(), Mt.dispose(), Lt.dispose(), Rt.dispose(), Ut.stop() + }, this.renderBufferImmediate = function(t, e) { + var n, i; + _t.initAttributes(), n = Mt.get(t), t.hasPositions && !n.position && (n.position = vt.createBuffer()), t.hasNormals && !n.normal && (n.normal = vt.createBuffer()), t.hasUvs && !n.uv && (n.uv = vt.createBuffer()), t.hasColors && !n.color && (n.color = vt.createBuffer()), i = e.getAttributes(), t.hasPositions && (vt.bindBuffer(34962, n.position), vt.bufferData(34962, t.positionArray, 35048), _t.enableAttribute(i.position), vt.vertexAttribPointer(i.position, 3, 5126, 0, 0, 0)), t.hasNormals && (vt.bindBuffer(34962, n.normal), vt.bufferData(34962, t.normalArray, 35048), _t.enableAttribute(i.normal), vt.vertexAttribPointer(i.normal, 3, 5126, 0, 0, 0)), t.hasUvs && (vt.bindBuffer(34962, n.uv), vt.bufferData(34962, t.uvArray, 35048), _t.enableAttribute(i.uv), vt.vertexAttribPointer(i.uv, 2, 5126, 0, 0, 0)), t.hasColors && (vt.bindBuffer(34962, n.color), vt.bufferData(34962, t.colorArray, 35048), _t.enableAttribute(i.color), vt.vertexAttribPointer(i.color, 3, 5126, 0, 0, 0)), _t.disableUnusedAttributes(), vt.drawArrays(4, 0, t.count), t.count = 0 + }, this.renderBufferDirect = function(t, e, i, r, o, a) { + var s, c, l, u, h, p, d, m, g, v, y, x, b, _, w, M = o.isMesh && o.matrixWorld.determinant() < 0; + if (_t.setMaterial(r, M), s = f(t, e, r, o), c = 0, k.geometry === i.id && k.program === s.id && k.wireframe === (1 == r.wireframe) || (k.geometry = i.id, k.program = s.id, k.wireframe = 1 == r.wireframe, c = 1), o.morphTargetInfluences && (Ot.update(o, i, r, s), c = 1), l = i.index, u = i.attributes.position, h = 1, 1 == r.wireframe && (l = At.getWireframeAttribute(i), h = 2), d = Dt, null !== l && (p = Tt.get(l), (d = It).setIndex(p)), c && (function(t, e, n, i) { + var r, o, a, s, c, l, u, h, p, d, f, m, g, v, y, x; + if (0 != bt.isWebGL2 || !t.isInstancedMesh && !e.isInstancedBufferGeometry || null !== xt.get("ANGLE_instanced_arrays")) { + for (s in _t.initAttributes(), r = e.attributes, o = i.getAttributes(), a = n.defaultAttributeValues, o) + if ((c = o[s]) >= 0) + if (void 0 !== (l = r[s])) { + if (u = l.normalized, h = l.itemSize, void 0 === (p = Tt.get(l))) continue; + d = p.buffer, f = p.type, m = p.bytesPerElement, l.isInterleavedBufferAttribute ? (v = (g = l.data).stride, y = l.offset, g && g.isInstancedInterleavedBuffer ? (_t.enableAttributeAndDivisor(c, g.meshPerAttribute), void 0 === e.maxInstancedCount && (e.maxInstancedCount = g.meshPerAttribute * g.count)) : _t.enableAttribute(c), vt.bindBuffer(34962, d), vt.vertexAttribPointer(c, h, f, u, v * m, y * m)) : (l.isInstancedBufferAttribute ? (_t.enableAttributeAndDivisor(c, l.meshPerAttribute), void 0 === e.maxInstancedCount && (e.maxInstancedCount = l.meshPerAttribute * l.count)) : _t.enableAttribute(c), vt.bindBuffer(34962, d), vt.vertexAttribPointer(c, h, f, u, 0, 0)) + } else if ("instanceMatrix" === s) { + if (void 0 === (p = Tt.get(t.instanceMatrix))) continue; + d = p.buffer, f = p.type, _t.enableAttributeAndDivisor(c + 0, 1), _t.enableAttributeAndDivisor(c + 1, 1), _t.enableAttributeAndDivisor(c + 2, 1), _t.enableAttributeAndDivisor(c + 3, 1), vt.bindBuffer(34962, d), vt.vertexAttribPointer(c + 0, 4, f, 0, 64, 0), vt.vertexAttribPointer(c + 1, 4, f, 0, 64, 16), vt.vertexAttribPointer(c + 2, 4, f, 0, 64, 32), vt.vertexAttribPointer(c + 3, 4, f, 0, 64, 48) + } else if (void 0 !== a && void 0 !== (x = a[s])) switch (x.length) { + case 2: + vt.vertexAttrib2fv(c, x); + break; + case 3: + vt.vertexAttrib3fv(c, x); + break; + case 4: + vt.vertexAttrib4fv(c, x); + break; + default: + vt.vertexAttrib1fv(c, x) + } + _t.disableUnusedAttributes() + } + }(o, i, r, s), null !== l && vt.bindBuffer(34963, p.buffer)), m = 1 / 0, null !== l ? m = l.count : void 0 !== u && (m = u.count), g = i.drawRange.start * h, v = i.drawRange.count * h, y = null !== a ? a.start * h : 0, x = null !== a ? a.count * h : 1 / 0, b = Math.max(g, y), 0 !== (_ = Math.max(0, Math.min(m, g + v, y + x) - 1 - b + 1))) { + if (o.isMesh) + if (1 == r.wireframe) _t.setLineWidth(r.wireframeLinewidth * n()), d.setMode(1); + else switch (o.drawMode) { + case ks: + d.setMode(4); + break; + case Bs: + d.setMode(5); + break; + case Us: + d.setMode(6) + } else o.isLine ? (void 0 === (w = r.linewidth) && (w = 1), _t.setLineWidth(w * n()), o.isLineSegments ? d.setMode(1) : o.isLineLoop ? d.setMode(2) : d.setMode(3)) : o.isPoints ? d.setMode(0) : o.isSprite && d.setMode(4); + o.isInstancedMesh ? d.renderInstances(i, b, _, o.count) : i.isInstancedBufferGeometry ? d.renderInstances(i, b, _, i.maxInstancedCount) : d.render(b, _) + } + }, this.compile = function(t, e) { + (P = Et.get(t, e)).init(), t.traverse(function(t) { + t.isLight && (P.pushLight(t), t.castShadow && P.pushShadow(t)) + }), P.setupLights(e), t.traverse(function(e) { + if (e.material) + if (Array.isArray(e.material)) + for (var n = 0; n < e.material.length; n++) d(e.material[n], t.fog, e); + else d(e.material, t.fog, e) + }) + }, Bt = null, (Ut = new K).setAnimationLoop(function(t) { + Rt.isPresenting() || Bt && Bt(t) + }), "undefined" != typeof window && Ut.setContext(window), this.setAnimationLoop = function(t) { + Bt = t, Rt.setAnimationLoop(t), Ut.start() + }, this.render = function(t, e, n, i) { + var r, o, a, s, c, l; + void 0 !== n && (r = n), void 0 !== i && (o = i), e && e.isCamera && (N || (k.geometry = null, k.program = null, k.wireframe = 0, F = -1, B = null, 1 == t.autoUpdate && t.updateMatrixWorld(), null === e.parent && e.updateMatrixWorld(), Rt.enabled && (e = Rt.getCamera(e)), (P = Et.get(t, e)).init(), t.onBeforeRender(E, t, e, r || z), mt.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), et.setFromMatrix(mt), ft = this.localClippingEnabled, ht = nt.init(this.clippingPlanes, ft, e), (C = Pt.get(t, e)).init(), function t(e, n, i, r) { + var o, a, s, c, l, u, h, p; + if (0 != e.visible) { + if (e.layers.test(n.layers)) + if (e.isGroup) i = e.renderOrder; + else if (e.isLOD) 1 == e.autoUpdate && e.update(n); + else if (e.isLight) P.pushLight(e), e.castShadow && P.pushShadow(e); + else if (e.isSprite) e.frustumCulled && !et.intersectsSprite(e) || (r && gt.setFromMatrixPosition(e.matrixWorld).applyMatrix4(mt), o = Lt.update(e), (a = e.material).visible && C.push(e, o, a, i, gt.z, null)); + else if (e.isImmediateRenderObject) r && gt.setFromMatrixPosition(e.matrixWorld).applyMatrix4(mt), C.push(e, null, e.material, i, gt.z, null); + else if ((e.isMesh || e.isLine || e.isPoints) && (e.isSkinnedMesh && e.skeleton.frame !== wt.render.frame && (e.skeleton.update(), e.skeleton.frame = wt.render.frame), !e.frustumCulled || et.intersectsObject(e))) + if (r && gt.setFromMatrixPosition(e.matrixWorld).applyMatrix4(mt), o = Lt.update(e), a = e.material, Array.isArray(a)) + for (c = 0, l = (s = o.groups).length; c < l; c++)(h = a[(u = s[c]).materialIndex]) && h.visible && C.push(e, o, h, i, gt.z, u); + else a.visible && C.push(e, o, a, i, gt.z, null); + for (c = 0, l = (p = e.children).length; c < l; c++) t(p[c], n, i, r) + } + }(t, e, 0, E.sortObjects), 1 == E.sortObjects && C.sort(), ht && nt.beginShadows(), a = P.state.shadowsArray, kt.render(a, t, e), P.setupLights(e), ht && nt.endShadows(), this.info.autoReset && this.info.reset(), void 0 !== r && this.setRenderTarget(r), Rt.enabled && Ft.isAvailable() && Ft.attachCamera(e), Nt.render(C, t, e, o), s = C.opaque, c = C.transparent, t.overrideMaterial ? (l = t.overrideMaterial, s.length && h(s, t, e, l), c.length && h(c, t, e, l)) : (s.length && h(s, t, e), c.length && h(c, t, e)), t.onAfterRender(E, t, e), null !== z && (St.updateRenderTargetMipmap(z), St.updateMultisampleRenderTarget(z)), _t.buffers.depth.setTest(1), _t.buffers.depth.setMask(1), _t.buffers.color.setMask(1), _t.setPolygonOffset(0), Rt.enabled && (Ft.isAvailable() && Ft.detachCamera(e), Rt.submitFrame()), C = null, P = null)) + }, this.setFramebuffer = function(t) { + O !== t && vt.bindFramebuffer(36160, t), O = t + }, this.getActiveCubeFace = function() { + return D + }, this.getActiveMipmapLevel = function() { + return I + }, this.getRenderTarget = function() { + return z + }, this.setRenderTarget = function(t, e, n) { + var i, r, o, a; + z = t, D = e, I = n, t && void 0 === Mt.get(t).__webglFramebuffer && St.setupRenderTarget(t), i = O, r = 0, t ? (o = Mt.get(t).__webglFramebuffer, t.isWebGLRenderTargetCube ? (i = o[e || 0], r = 1) : i = t.isWebGLMultisampleRenderTarget ? Mt.get(t).__webglMultisampledFramebuffer : o, j.copy(t.viewport), V.copy(t.scissor), W = t.scissorTest) : (j.copy(Y).multiplyScalar(X).floor(), V.copy(Z).multiplyScalar(X).floor(), W = $), R !== i && (vt.bindFramebuffer(36160, i), R = i), _t.viewport(j), _t.scissor(V), _t.setScissorTest(W), r && (a = Mt.get(t.texture), vt.framebufferTexture2D(36160, 36064, 34069 + (e || 0), a.__webglTexture, n || 0)) + }, this.readRenderTargetPixels = function(t, e, n, i, r, o, a) { + var s, c, l, u, h; + if (t && t.isWebGLRenderTarget && (s = Mt.get(t).__webglFramebuffer, t.isWebGLRenderTargetCube && void 0 !== a && (s = s[a]), s)) { + c = 0, s !== R && (vt.bindFramebuffer(36160, s), c = 1); + try { + if (u = (l = t.texture).format, h = l.type, u !== ss && zt.convert(u) !== vt.getParameter(35739)) return; + if (!(h === Xa || zt.convert(h) === vt.getParameter(35738) || h === Ka && (bt.isWebGL2 || xt.get("OES_texture_float") || xt.get("WEBGL_color_buffer_float")) || h === ts && (bt.isWebGL2 ? xt.get("EXT_color_buffer_float") : xt.get("EXT_color_buffer_half_float")))) return; + 36053 === vt.checkFramebufferStatus(36160) && e >= 0 && e <= t.width - i && n >= 0 && n <= t.height - r && vt.readPixels(e, n, i, r, zt.convert(u), zt.convert(h), o) + } finally { + c && vt.bindFramebuffer(36160, R) + } + } + }, this.copyFramebufferToTexture = function(t, e, n) { + var i = e.image.width, + r = e.image.height, + o = zt.convert(e.format); + St.setTexture2D(e, 0), vt.copyTexImage2D(3553, n || 0, o, t.x, t.y, i, r, 0) + }, this.copyTextureToTexture = function(t, e, n, i) { + var r = e.image.width, + o = e.image.height, + a = zt.convert(n.format), + s = zt.convert(n.type); + St.setTexture2D(n, 0), e.isDataTexture ? vt.texSubImage2D(3553, i || 0, t.x, t.y, r, o, a, s, e.image.data) : vt.texSubImage2D(3553, i || 0, t.x, t.y, a, s, e.image) + }, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { + detail: this + })) + } + + function Ue(t, e) { + this.name = "", this.color = new x(t), this.density = void 0 !== e ? e : 25e-5 + } + + function je(t, e, n) { + this.name = "", this.color = new x(t), this.near = void 0 !== e ? e : 1, this.far = void 0 !== n ? n : 1e3 + } + + function Ve(t, e) { + this.array = t, this.stride = e, this.count = void 0 !== t ? t.length / e : 0, this.dynamic = 0, this.updateRange = { + offset: 0, + count: -1 + }, this.version = 0 + } + + function Ge(t, e, n, i) { + this.data = t, this.itemSize = e, this.offset = n, this.normalized = 1 == i + } + + function We(t) { + S.call(this), this.type = "SpriteMaterial", this.color = new x(16777215), this.map = null, this.rotation = 0, this.sizeAttenuation = 1, this.transparent = 1, this.setValues(t) + } + + function He(t) { + var n; + p.call(this), this.type = "Sprite", void 0 === gu && (gu = new k, n = new Ve(new Float32Array([-.5, -.5, 0, 0, 0, .5, -.5, 0, 1, 0, .5, .5, 0, 1, 1, -.5, .5, 0, 0, 1]), 5), gu.setIndex([0, 1, 2, 0, 2, 3]), gu.addAttribute("position", new Ge(n, 3, 0, 0)), gu.addAttribute("uv", new Ge(n, 2, 3, 0))), this.geometry = gu, this.material = void 0 !== t ? t : new We, this.center = new e(.5, .5) + } + + function qe(t, e, n, i, r, o) { + bu.subVectors(t, n).addScalar(.5).multiply(i), void 0 !== r ? (_u.x = o * bu.x - r * bu.y, _u.y = r * bu.x + o * bu.y) : _u.copy(bu), t.copy(e), t.x += _u.x, t.y += _u.y, t.applyMatrix4(wu) + } + + function Xe() { + p.call(this), this.type = "LOD", Object.defineProperties(this, { + levels: { + enumerable: 1, + value: [] + } + }), this.autoUpdate = 1 + } + + function Ye(t, e) { + t && t.isGeometry, B.call(this, t, e), this.type = "SkinnedMesh", this.bindMode = "attached", this.bindMatrix = new l, this.bindMatrixInverse = new l + } + + function Ze(t, e) { + if (t = t || [], this.bones = t.slice(0), this.boneMatrices = new Float32Array(16 * this.bones.length), this.frame = -1, void 0 === e) this.calculateInverses(); + else if (this.bones.length === e.length) this.boneInverses = e.slice(0); + else { + this.boneInverses = []; + for (var n = 0, i = this.bones.length; n < i; n++) this.boneInverses.push(new l) + } + } + + function Je() { + p.call(this), this.type = "Bone" + } + + function $e(t, e, n) { + B.call(this, t, e), this.instanceMatrix = new A(new Float32Array(16 * n), 16), this.count = n + } + + function Qe(t) { + S.call(this), this.type = "LineBasicMaterial", this.color = new x(16777215), this.linewidth = 1, this.linecap = "round", this.linejoin = "round", this.setValues(t) + } + + function Ke(t, e) { + p.call(this), this.type = "Line", this.geometry = void 0 !== t ? t : new k, this.material = void 0 !== e ? e : new Qe({ + color: 16777215 * Math.random() + }) + } + + function tn(t, e) { + Ke.call(this, t, e), this.type = "LineSegments" + } + + function en(t, e) { + Ke.call(this, t, e), this.type = "LineLoop" + } + + function nn(t) { + S.call(this), this.type = "PointsMaterial", this.color = new x(16777215), this.map = null, this.size = 1, this.sizeAttenuation = 1, this.morphTargets = 0, this.setValues(t) + } + + function rn(t, e) { + p.call(this), this.type = "Points", this.geometry = void 0 !== t ? t : new k, this.material = void 0 !== e ? e : new nn({ + color: 16777215 * Math.random() + }), this.updateMorphTargets() + } + + function on(t, e, n, r, o, a, s) { + var c, l, u = ju.distanceSqToPoint(t); + if (u < n) { + if (c = new i, ju.closestPointToPoint(t, c), c.applyMatrix4(r), (l = o.ray.origin.distanceTo(c)) < o.near || l > o.far) return; + a.push({ + distance: l, + distanceToRay: Math.sqrt(u), + point: c, + index: e, + face: null, + object: s + }) + } + } + + function an(t, e, n, i, r, a, s, c, l) { + o.call(this, t, e, n, i, r, a, s, c, l), this.format = void 0 !== s ? s : as, this.minFilter = void 0 !== a ? a : Wa, this.magFilter = void 0 !== r ? r : Wa, this.generateMipmaps = 0 + } + + function sn(t, e, n, i, r, a, s, c, l, u, h, p) { + o.call(this, null, a, s, c, l, u, i, r, h, p), this.image = { + width: e, + height: n + }, this.mipmaps = t, this.flipY = 0, this.generateMipmaps = 0 + } + + function cn(t, e, n, i, r, a, s, c, l) { + o.call(this, t, e, n, i, r, a, s, c, l), this.needsUpdate = 1 + } + + function ln(t, e, n, i, r, a, s, c, l, u) { + if ((u = void 0 !== u ? u : us) !== us && u !== hs) throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat"); + void 0 === n && u === us && (n = Ja), void 0 === n && u === hs && (n = rs), o.call(this, null, i, r, a, s, c, u, n, l), this.image = { + width: t, + height: e + }, this.magFilter = void 0 !== s ? s : ja, this.minFilter = void 0 !== c ? c : ja, this.flipY = 0, this.generateMipmaps = 0 + } + + function un(t) { + var e, n, r, o, a, s, c, l, u, h, p, d, f, m, g, v, y, x, b, _, w, M, S; + if (k.call(this), this.type = "WireframeGeometry", e = [], c = [0, 0], l = {}, f = ["a", "b", "c"], t && t.isGeometry) { + for (n = 0, o = (g = t.faces).length; n < o; n++) + for (v = g[n], r = 0; r < 3; r++) h = v[f[r]], p = v[f[(r + 1) % 3]], c[0] = Math.min(h, p), c[1] = Math.max(h, p), void 0 === l[d = c[0] + "," + c[1]] && (l[d] = { + index1: c[0], + index2: c[1] + }); + for (d in l) u = l[d], m = t.vertices[u.index1], e.push(m.x, m.y, m.z), m = t.vertices[u.index2], e.push(m.x, m.y, m.z) + } else if (t && t.isBufferGeometry) + if (m = new i, null !== t.index) { + for (y = t.attributes.position, x = t.index, 0 === (b = t.groups).length && (b = [{ + start: 0, + count: x.count, + materialIndex: 0 + }]), a = 0, s = b.length; a < s; ++a) + for (n = w = (_ = b[a]).start, o = w + _.count; n < o; n += 3) + for (r = 0; r < 3; r++) h = x.getX(n + r), p = x.getX(n + (r + 1) % 3), c[0] = Math.min(h, p), c[1] = Math.max(h, p), void 0 === l[d = c[0] + "," + c[1]] && (l[d] = { + index1: c[0], + index2: c[1] + }); + for (d in l) u = l[d], m.fromBufferAttribute(y, u.index1), e.push(m.x, m.y, m.z), m.fromBufferAttribute(y, u.index2), e.push(m.x, m.y, m.z) + } else + for (n = 0, o = (y = t.attributes.position).count / 3; n < o; n++) + for (r = 0; r < 3; r++) M = 3 * n + r, m.fromBufferAttribute(y, M), e.push(m.x, m.y, m.z), S = 3 * n + (r + 1) % 3, m.fromBufferAttribute(y, S), e.push(m.x, m.y, m.z); + this.addAttribute("position", new I(e, 3)) + } + + function hn(t, e, n) { + V.call(this), this.type = "ParametricGeometry", this.parameters = { + func: t, + slices: e, + stacks: n + }, this.fromBufferGeometry(new pn(t, e, n)), this.mergeVertices() + } + + function pn(t, e, n) { + var r, o, a, s, c, l, u, h, p, d, f, m, g, v, y, x, b, _; + for (k.call(this), this.type = "ParametricBufferGeometry", this.parameters = { + func: t, + slices: e, + stacks: n + }, r = [], o = [], a = [], s = [], 1e-5, c = new i, l = new i, u = new i, h = new i, p = new i, t.length, m = e + 1, d = 0; d <= n; d++) + for (g = d / n, f = 0; f <= e; f++) t(v = f / e, g, l), o.push(l.x, l.y, l.z), v - 1e-5 >= 0 ? (t(v - 1e-5, g, u), h.subVectors(l, u)) : (t(v + 1e-5, g, u), h.subVectors(u, l)), g - 1e-5 >= 0 ? (t(v, g - 1e-5, u), p.subVectors(l, u)) : (t(v, g + 1e-5, u), p.subVectors(u, l)), c.crossVectors(h, p).normalize(), a.push(c.x, c.y, c.z), s.push(v, g); + for (d = 0; d < n; d++) + for (f = 0; f < e; f++) y = d * m + f, x = d * m + f + 1, b = (d + 1) * m + f + 1, _ = (d + 1) * m + f, r.push(y, x, _), r.push(x, b, _); + this.setIndex(r), this.addAttribute("position", new I(o, 3)), this.addAttribute("normal", new I(a, 3)), this.addAttribute("uv", new I(s, 2)) + } + + function dn(t, e, n, i) { + V.call(this), this.type = "PolyhedronGeometry", this.parameters = { + vertices: t, + indices: e, + radius: n, + detail: i + }, this.fromBufferGeometry(new fn(t, e, n, i)), this.mergeVertices() + } + + function fn(t, n, r, o) { + function a(t, e, n, i) { + var r, o, a, c, l, u, h = Math.pow(2, i), + p = []; + for (r = 0; r <= h; r++) + for (p[r] = [], a = t.clone().lerp(n, r / h), c = e.clone().lerp(n, r / h), l = h - r, o = 0; o <= l; o++) p[r][o] = 0 === o && r === h ? a : a.clone().lerp(c, o / l); + for (r = 0; r < h; r++) + for (o = 0; o < 2 * (h - r) - 1; o++) u = Math.floor(o / 2), o % 2 == 0 ? (s(p[r][u + 1]), s(p[r + 1][u]), s(p[r][u])) : (s(p[r][u + 1]), s(p[r + 1][u + 1]), s(p[r + 1][u])) + } + + function s(t) { + h.push(t.x, t.y, t.z) + } + + function c(e, n) { + var i = 3 * e; + n.x = t[i + 0], n.y = t[i + 1], n.z = t[i + 2] + } + + function l(t, e, n, i) { + i < 0 && 1 === t.x && (p[e] = t.x - 1), 0 === n.x && 0 === n.z && (p[e] = i / 2 / Math.PI + .5) + } + + function u(t) { + return Math.atan2(t.z, -t.x) + } + var h, p; + k.call(this), this.type = "PolyhedronBufferGeometry", this.parameters = { + vertices: t, + indices: n, + radius: r, + detail: o + }, r = r || 1, h = [], p = [], + function(t) { + var e, r = new i, + o = new i, + s = new i; + for (e = 0; e < n.length; e += 3) c(n[e + 0], r), c(n[e + 1], o), c(n[e + 2], s), a(r, o, s, t) + }(o = o || 0), + function(t) { + var e, n = new i; + for (e = 0; e < h.length; e += 3) n.x = h[e + 0], n.y = h[e + 1], n.z = h[e + 2], n.normalize().multiplyScalar(t), h[e + 0] = n.x, h[e + 1] = n.y, h[e + 2] = n.z + }(r), + function() { + var t, n, r, o, a = new i; + for (t = 0; t < h.length; t += 3) a.x = h[t + 0], a.y = h[t + 1], a.z = h[t + 2], n = u(a) / 2 / Math.PI + .5, r = Math.atan2(-(o = a).y, Math.sqrt(o.x * o.x + o.z * o.z)) / Math.PI + .5, p.push(n, 1 - r); + ! function() { + var t, n, r, o, a, s, c, d, f, m; + for (t = new i, n = new i, r = new i, o = new i, a = new e, s = new e, c = new e, d = 0, f = 0; d < h.length; d += 9, f += 6) t.set(h[d + 0], h[d + 1], h[d + 2]), n.set(h[d + 3], h[d + 4], h[d + 5]), r.set(h[d + 6], h[d + 7], h[d + 8]), a.set(p[f + 0], p[f + 1]), s.set(p[f + 2], p[f + 3]), c.set(p[f + 4], p[f + 5]), o.copy(t).add(n).add(r).divideScalar(3), l(a, f + 0, t, m = u(o)), l(s, f + 2, n, m), l(c, f + 4, r, m) + }(), + function() { + var t, e, n, i; + for (t = 0; t < p.length; t += 6) e = p[t + 0], n = p[t + 2], i = p[t + 4], Math.max(e, n, i) > .9 && Math.min(e, n, i) < .1 && (e < .2 && (p[t + 0] += 1), n < .2 && (p[t + 2] += 1), i < .2 && (p[t + 4] += 1)) + }() + }(), this.addAttribute("position", new I(h, 3)), this.addAttribute("normal", new I(h.slice(), 3)), this.addAttribute("uv", new I(p, 2)), 0 === o ? this.computeVertexNormals() : this.normalizeNormals() + } + + function mn(t, e) { + V.call(this), this.type = "TetrahedronGeometry", this.parameters = { + radius: t, + detail: e + }, this.fromBufferGeometry(new gn(t, e)), this.mergeVertices() + } + + function gn(t, e) { + fn.call(this, [1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1], [2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1], t, e), this.type = "TetrahedronBufferGeometry", this.parameters = { + radius: t, + detail: e + } + } + + function vn(t, e) { + V.call(this), this.type = "OctahedronGeometry", this.parameters = { + radius: t, + detail: e + }, this.fromBufferGeometry(new yn(t, e)), this.mergeVertices() + } + + function yn(t, e) { + fn.call(this, [1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1], [0, 2, 4, 0, 4, 3, 0, 3, 5, 0, 5, 2, 1, 2, 5, 1, 5, 3, 1, 3, 4, 1, 4, 2], t, e), this.type = "OctahedronBufferGeometry", this.parameters = { + radius: t, + detail: e + } + } + + function xn(t, e) { + V.call(this), this.type = "IcosahedronGeometry", this.parameters = { + radius: t, + detail: e + }, this.fromBufferGeometry(new bn(t, e)), this.mergeVertices() + } + + function bn(t, e) { + var n = 1.618033988749895, + i = [-1, n, 0, 1, n, 0, -1, -n, 0, 1, -n, 0, 0, -1, n, 0, 1, n, 0, -1, -n, 0, 1, -n, n, 0, -1, n, 0, 1, -n, 0, -1, -n, 0, 1]; + fn.call(this, i, [0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11, 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8, 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9, 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1], t, e), this.type = "IcosahedronBufferGeometry", this.parameters = { + radius: t, + detail: e + } + } + + function _n(t, e) { + V.call(this), this.type = "DodecahedronGeometry", this.parameters = { + radius: t, + detail: e + }, this.fromBufferGeometry(new wn(t, e)), this.mergeVertices() + } + + function wn(t, e) { + var n = 1.618033988749895, + i = 1 / n, + r = [-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, -i, -n, 0, -i, n, 0, i, -n, 0, i, n, -i, -n, 0, -i, n, 0, i, -n, 0, i, n, 0, -n, 0, -i, n, 0, -i, -n, 0, i, n, 0, i]; + fn.call(this, r, [3, 11, 7, 3, 7, 15, 3, 15, 13, 7, 19, 17, 7, 17, 6, 7, 6, 15, 17, 4, 8, 17, 8, 10, 17, 10, 6, 8, 0, 16, 8, 16, 2, 8, 2, 10, 0, 12, 1, 0, 1, 18, 0, 18, 16, 6, 10, 2, 6, 2, 13, 6, 13, 15, 2, 16, 18, 2, 18, 3, 2, 3, 13, 18, 1, 9, 18, 9, 11, 18, 11, 3, 4, 14, 12, 4, 12, 0, 4, 0, 8, 11, 9, 5, 11, 5, 19, 11, 19, 7, 19, 5, 14, 19, 14, 4, 19, 4, 17, 1, 12, 14, 1, 14, 5, 1, 5, 9], t, e), this.type = "DodecahedronBufferGeometry", this.parameters = { + radius: t, + detail: e + } + } + + function Mn(t, e, n, i, r) { + V.call(this), this.type = "TubeGeometry", this.parameters = { + path: t, + tubularSegments: e, + radius: n, + radialSegments: i, + closed: r + }; + var o = new Sn(t, e, n, i, r); + this.tangents = o.tangents, this.normals = o.normals, this.binormals = o.binormals, this.fromBufferGeometry(o), this.mergeVertices() + } + + function Sn(t, n, r, o, a) { + function s(e) { + var i, a, s, h, d; + for (p = t.getPointAt(e / n, p), i = c.normals[e], a = c.binormals[e], f = 0; f <= o; f++) h = Math.sin(s = f / o * Math.PI * 2), d = -Math.cos(s), u.x = d * i.x + h * a.x, u.y = d * i.y + h * a.y, u.z = d * i.z + h * a.z, u.normalize(), g.push(u.x, u.y, u.z), l.x = p.x + r * u.x, l.y = p.y + r * u.y, l.z = p.z + r * u.z, m.push(l.x, l.y, l.z) + } + var c, l, u, h, p, d, f, m, g, v, y; + k.call(this), this.type = "TubeBufferGeometry", this.parameters = { + path: t, + tubularSegments: n, + radius: r, + radialSegments: o, + closed: a + }, n = n || 64, r = r || 1, o = o || 8, a = a || 0, c = t.computeFrenetFrames(n, a), this.tangents = c.tangents, this.normals = c.normals, this.binormals = c.binormals, l = new i, u = new i, h = new e, p = new i, m = [], g = [], v = [], y = [], + function() { + for (d = 0; d < n; d++) s(d); + s(0 == a ? n : 0), + function() { + for (d = 0; d <= n; d++) + for (f = 0; f <= o; f++) h.x = d / n, h.y = f / o, v.push(h.x, h.y) + }(), + function() { + var t, e, i, r; + for (f = 1; f <= n; f++) + for (d = 1; d <= o; d++) t = (o + 1) * (f - 1) + (d - 1), e = (o + 1) * f + (d - 1), i = (o + 1) * f + d, r = (o + 1) * (f - 1) + d, y.push(t, e, r), y.push(e, i, r) + }() + }(), this.setIndex(y), this.addAttribute("position", new I(m, 3)), this.addAttribute("normal", new I(g, 3)), this.addAttribute("uv", new I(v, 2)) + } + + function Tn(t, e, n, i, r, o) { + V.call(this), this.type = "TorusKnotGeometry", this.parameters = { + radius: t, + tube: e, + tubularSegments: n, + radialSegments: i, + p: r, + q: o + }, this.fromBufferGeometry(new An(t, e, n, i, r, o)), this.mergeVertices() + } + + function An(t, e, n, r, o, a) { + function s(t, e, n, i, r) { + var o = Math.cos(t), + a = Math.sin(t), + s = n / e * t, + c = Math.cos(s); + r.x = i * (2 + c) * .5 * o, r.y = i * (2 + c) * a * .5, r.z = i * Math.sin(s) * .5 + } + var c, l, u, h, p, d, f, m, g, v, y, x, b, _, w, M, S, T, A, L, C; + for (k.call(this), this.type = "TorusKnotBufferGeometry", this.parameters = { + radius: t, + tube: e, + tubularSegments: n, + radialSegments: r, + p: o, + q: a + }, t = t || 1, e = e || .4, n = Math.floor(n) || 64, r = Math.floor(r) || 8, o = o || 2, a = a || 3, c = [], l = [], u = [], h = [], f = new i, m = new i, g = new i, v = new i, y = new i, x = new i, b = new i, p = 0; p <= n; ++p) + for (s(_ = p / n * o * Math.PI * 2, o, a, t, g), s(_ + .01, o, a, t, v), x.subVectors(v, g), b.addVectors(v, g), y.crossVectors(x, b), b.crossVectors(y, x), y.normalize(), b.normalize(), d = 0; d <= r; ++d) M = -e * Math.cos(w = d / r * Math.PI * 2), S = e * Math.sin(w), f.x = g.x + (M * b.x + S * y.x), f.y = g.y + (M * b.y + S * y.y), f.z = g.z + (M * b.z + S * y.z), l.push(f.x, f.y, f.z), m.subVectors(f, g).normalize(), u.push(m.x, m.y, m.z), h.push(p / n), h.push(d / r); + for (d = 1; d <= n; d++) + for (p = 1; p <= r; p++) T = (r + 1) * (d - 1) + (p - 1), A = (r + 1) * d + (p - 1), L = (r + 1) * d + p, C = (r + 1) * (d - 1) + p, c.push(T, A, C), c.push(A, L, C); + this.setIndex(c), this.addAttribute("position", new I(l, 3)), this.addAttribute("normal", new I(u, 3)), this.addAttribute("uv", new I(h, 2)) + } + + function Ln(t, e, n, i, r) { + V.call(this), this.type = "TorusGeometry", this.parameters = { + radius: t, + tube: e, + radialSegments: n, + tubularSegments: i, + arc: r + }, this.fromBufferGeometry(new Cn(t, e, n, i, r)), this.mergeVertices() + } + + function Cn(t, e, n, r, o) { + var a, s, c, l, u, h, p, d, f, m, g, v, y, x, b; + for (k.call(this), this.type = "TorusBufferGeometry", this.parameters = { + radius: t, + tube: e, + radialSegments: n, + tubularSegments: r, + arc: o + }, t = t || 1, e = e || .4, n = Math.floor(n) || 8, r = Math.floor(r) || 6, o = o || 2 * Math.PI, a = [], s = [], c = [], l = [], u = new i, h = new i, p = new i, d = 0; d <= n; d++) + for (f = 0; f <= r; f++) m = f / r * o, g = d / n * Math.PI * 2, h.x = (t + e * Math.cos(g)) * Math.cos(m), h.y = (t + e * Math.cos(g)) * Math.sin(m), h.z = e * Math.sin(g), s.push(h.x, h.y, h.z), u.x = t * Math.cos(m), u.y = t * Math.sin(m), p.subVectors(h, u).normalize(), c.push(p.x, p.y, p.z), l.push(f / r), l.push(d / n); + for (d = 1; d <= n; d++) + for (f = 1; f <= r; f++) v = (r + 1) * d + f - 1, y = (r + 1) * (d - 1) + f - 1, x = (r + 1) * (d - 1) + f, b = (r + 1) * d + f, a.push(v, y, b), a.push(y, x, b); + this.setIndex(a), this.addAttribute("position", new I(s, 3)), this.addAttribute("normal", new I(c, 3)), this.addAttribute("uv", new I(l, 2)) + } + + function Pn(t, e, n, i, r) { + var o, a; + if (r === function(t, e, n, i) { + for (var r = 0, o = e, a = n - i; o < n; o += i) r += (t[a] - t[o]) * (t[o + 1] + t[a + 1]), a = o; + return r + }(t, e, n, i) > 0) + for (o = e; o < n; o += i) a = Xn(o, t[o], t[o + 1], a); + else + for (o = n - i; o >= e; o -= i) a = Xn(o, t[o], t[o + 1], a); + return a && Gn(a, a.next) && (Yn(a), a = a.next), a + } + + function En(t, e) { + if (!t) return t; + e || (e = t); + var n, i = t; + do { + if (n = 0, i.steiner || !Gn(i, i.next) && 0 !== Vn(i.prev, i, i.next)) i = i.next; + else { + if (Yn(i), (i = e = i.prev) === i.next) break; + n = 1 + } + } while (n || i !== e); + return e + } + + function Nn(t, e, n, i, r, o, a) { + if (t) { + !a && o && function(t, e, n, i) { + var r = t; + do { + null === r.z && (r.z = kn(r.x, r.y, e, n, i)), r.prevZ = r.prev, r.nextZ = r.next, r = r.next + } while (r !== t); + r.prevZ.nextZ = null, r.prevZ = null, + function(t) { + var e, n, i, r, o, a, s, c, l = 1; + do { + for (n = t, t = null, o = null, a = 0; n;) { + for (a++, i = n, s = 0, e = 0; e < l && (s++, i = i.nextZ); e++); + for (c = l; s > 0 || c > 0 && i;) 0 !== s && (0 === c || !i || n.z <= i.z) ? (r = n, n = n.nextZ, s--) : (r = i, i = i.nextZ, c--), o ? o.nextZ = r : t = r, r.prevZ = o, o = r; + n = i + } + o.nextZ = null, l *= 2 + } while (a > 1) + }(r) + }(t, i, r, o); + for (var s, c, l = t; t.prev !== t.next;) + if (s = t.prev, c = t.next, o ? Dn(t, i, r, o) : On(t)) e.push(s.i / n), e.push(t.i / n), e.push(c.i / n), Yn(t), t = c.next, l = c.next; + else if ((t = c) === l) { + a ? 1 === a ? Nn(t = In(t, e, n), e, n, i, r, o, 2) : 2 === a && zn(t, e, n, i, r, o) : Nn(En(t), e, n, i, r, o, 1); + break + } + } + } + + function On(t) { + var e, n = t.prev, + i = t, + r = t.next; + if (Vn(n, i, r) >= 0) return 0; + for (e = t.next.next; e !== t.prev;) { + if (Un(n.x, n.y, i.x, i.y, r.x, r.y, e.x, e.y) && Vn(e.prev, e, e.next) >= 0) return 0; + e = e.next + } + return 1 + } + + function Dn(t, e, n, i) { + var r, o, a, s, c, l, u, h, p = t.prev, + d = t, + f = t.next; + if (Vn(p, d, f) >= 0) return 0; + for (r = p.x < d.x ? p.x < f.x ? p.x : f.x : d.x < f.x ? d.x : f.x, o = p.y < d.y ? p.y < f.y ? p.y : f.y : d.y < f.y ? d.y : f.y, a = p.x > d.x ? p.x > f.x ? p.x : f.x : d.x > f.x ? d.x : f.x, s = p.y > d.y ? p.y > f.y ? p.y : f.y : d.y > f.y ? d.y : f.y, c = kn(r, o, e, n, i), l = kn(a, s, e, n, i), u = t.prevZ, h = t.nextZ; u && u.z >= c && h && h.z <= l;) { + if (u !== t.prev && u !== t.next && Un(p.x, p.y, d.x, d.y, f.x, f.y, u.x, u.y) && Vn(u.prev, u, u.next) >= 0) return 0; + if (u = u.prevZ, h !== t.prev && h !== t.next && Un(p.x, p.y, d.x, d.y, f.x, f.y, h.x, h.y) && Vn(h.prev, h, h.next) >= 0) return 0; + h = h.nextZ + } + for (; u && u.z >= c;) { + if (u !== t.prev && u !== t.next && Un(p.x, p.y, d.x, d.y, f.x, f.y, u.x, u.y) && Vn(u.prev, u, u.next) >= 0) return 0; + u = u.prevZ + } + for (; h && h.z <= l;) { + if (h !== t.prev && h !== t.next && Un(p.x, p.y, d.x, d.y, f.x, f.y, h.x, h.y) && Vn(h.prev, h, h.next) >= 0) return 0; + h = h.nextZ + } + return 1 + } + + function In(t, e, n) { + var i, r, o = t; + do { + !Gn(i = o.prev, r = o.next.next) && Wn(i, o, o.next, r) && Hn(i, r) && Hn(r, i) && (e.push(i.i / n), e.push(o.i / n), e.push(r.i / n), Yn(o), Yn(o.next), o = t = r), o = o.next + } while (o !== t); + return o + } + + function zn(t, e, n, i, r, o) { + var a, s, c = t; + do { + for (a = c.next.next; a !== c.prev;) { + if (c.i !== a.i && jn(c, a)) return s = qn(c, a), c = En(c, c.next), s = En(s, s.next), Nn(c, e, n, i, r, o), void Nn(s, e, n, i, r, o); + a = a.next + } + c = c.next + } while (c !== t) + } + + function Rn(t, e) { + return t.x - e.x + } + + function Fn(t, e) { + if (e = function(t, e) { + var n, i, r, o, a, s, c, l = e, + u = t.x, + h = t.y, + p = -1 / 0; + do { + if (h <= l.y && h >= l.next.y && l.next.y !== l.y && (i = l.x + (h - l.y) * (l.next.x - l.x) / (l.next.y - l.y)) <= u && i > p) { + if (p = i, i === u) { + if (h === l.y) return l; + if (h === l.next.y) return l.next + } + n = l.x < l.next.x ? l : l.next + } + l = l.next + } while (l !== e); + if (!n) return null; + if (u === p) return n.prev; + for (r = n, o = n.x, a = n.y, s = 1 / 0, l = n.next; l !== r;) u >= l.x && l.x >= o && u !== l.x && Un(h < a ? u : p, h, o, a, h < a ? p : u, h, l.x, l.y) && ((c = Math.abs(h - l.y) / (u - l.x)) < s || c === s && l.x > n.x) && Hn(l, t) && (n = l, s = c), l = l.next; + return n + }(t, e)) { + var n = qn(e, t); + En(n, n.next) + } + } + + function kn(t, e, n, i, r) { + return (t = 1431655765 & ((t = 858993459 & ((t = 252645135 & ((t = 16711935 & ((t = 32767 * (t - n) * r) | t << 8)) | t << 4)) | t << 2)) | t << 1)) | (e = 1431655765 & ((e = 858993459 & ((e = 252645135 & ((e = 16711935 & ((e = 32767 * (e - i) * r) | e << 8)) | e << 4)) | e << 2)) | e << 1)) << 1 + } + + function Bn(t) { + var e = t, + n = t; + do { + (e.x < n.x || e.x === n.x && e.y < n.y) && (n = e), e = e.next + } while (e !== t); + return n + } + + function Un(t, e, n, i, r, o, a, s) { + return (r - a) * (e - s) - (t - a) * (o - s) >= 0 && (t - a) * (i - s) - (n - a) * (e - s) >= 0 && (n - a) * (o - s) - (r - a) * (i - s) >= 0 + } + + function jn(t, e) { + return t.next.i !== e.i && t.prev.i !== e.i && ! function(t, e) { + var n = t; + do { + if (n.i !== t.i && n.next.i !== t.i && n.i !== e.i && n.next.i !== e.i && Wn(n, n.next, t, e)) return 1; + n = n.next + } while (n !== t); + return 0 + }(t, e) && Hn(t, e) && Hn(e, t) && function(t, e) { + var n = t, + i = 0, + r = (t.x + e.x) / 2, + o = (t.y + e.y) / 2; + do { + n.y > o != n.next.y > o && n.next.y !== n.y && r < (n.next.x - n.x) * (o - n.y) / (n.next.y - n.y) + n.x && (i = !i), n = n.next + } while (n !== t); + return i + }(t, e) + } + + function Vn(t, e, n) { + return (e.y - t.y) * (n.x - e.x) - (e.x - t.x) * (n.y - e.y) + } + + function Gn(t, e) { + return t.x === e.x && t.y === e.y + } + + function Wn(t, e, n, i) { + return Gn(t, n) && Gn(e, i) || Gn(t, i) && Gn(n, e) ? 1 : Vn(t, e, n) > 0 != Vn(t, e, i) > 0 && Vn(n, i, t) > 0 != Vn(n, i, e) > 0 + } + + function Hn(t, e) { + return Vn(t.prev, t, t.next) < 0 ? Vn(t, e, t.next) >= 0 && Vn(t, t.prev, e) >= 0 : Vn(t, e, t.prev) < 0 || Vn(t, t.next, e) < 0 + } + + function qn(t, e) { + var n = new Zn(t.i, t.x, t.y), + i = new Zn(e.i, e.x, e.y), + r = t.next, + o = e.prev; + return t.next = e, e.prev = t, n.next = r, r.prev = n, i.next = n, n.prev = i, o.next = i, i.prev = o, i + } + + function Xn(t, e, n, i) { + var r = new Zn(t, e, n); + return i ? (r.next = i.next, r.prev = i, i.next.prev = r, i.next = r) : (r.prev = r, r.next = r), r + } + + function Yn(t) { + t.next.prev = t.prev, t.prev.next = t.next, t.prevZ && (t.prevZ.nextZ = t.nextZ), t.nextZ && (t.nextZ.prevZ = t.prevZ) + } + + function Zn(t, e, n) { + this.i = t, this.x = e, this.y = n, this.prev = null, this.next = null, this.z = null, this.prevZ = null, this.nextZ = null, this.steiner = 0 + } + + function Jn(t) { + var e = t.length; + e > 2 && t[e - 1].equals(t[0]) && t.pop() + } + + function $n(t, e) { + for (var n = 0; n < e.length; n++) t.push(e[n].x), t.push(e[n].y) + } + + function Qn(t, e) { + V.call(this), this.type = "ExtrudeGeometry", this.parameters = { + shapes: t, + options: e + }, this.fromBufferGeometry(new Kn(t, e)), this.mergeVertices() + } + + function Kn(t, n) { + function r(t) { + function r(t, e, n) { + return e.clone().multiplyScalar(n).add(t) + } + + function c(t, n, i) { + var r, o, a, s, c, l, u, h, p, d, f = t.x - n.x, + m = t.y - n.y, + g = i.x - t.x, + v = i.y - t.y, + y = f * f + m * m; + if (Math.abs(f * v - m * g) > Number.EPSILON) { + if (s = Math.sqrt(y), c = Math.sqrt(g * g + v * v), l = n.x - m / s, u = n.y + f / s, (p = (r = l + f * (h = ((i.x - v / c - l) * v - (i.y + g / c - u) * g) / (f * v - m * g)) - t.x) * r + (o = u + m * h - t.y) * o) <= 2) return new e(r, o); + a = Math.sqrt(p / 2) + } else d = 0, f > Number.EPSILON ? g > Number.EPSILON && (d = 1) : f < -Number.EPSILON ? g < -Number.EPSILON && (d = 1) : Math.sign(m) === Math.sign(v) && (d = 1), d ? (r = -m, o = f, a = Math.sqrt(y)) : (r = f, o = m, a = Math.sqrt(y / 2)); + return new e(r / a, o / a) + } + + function l(t, e) { + var n, i, r, o, a, s; + for (k = t.length; --k >= 0;) + for (n = k, (i = k - 1) < 0 && (i = t.length - 1), r = 0, o = Y + 2 * tt, r = 0; r < o; r++) p(e + n + (a = I * r), e + i + a, e + i + (s = I * (r + 1)), e + n + s) + } + + function u(t, e, n) { + q.push(t), q.push(e), q.push(n) + } + + function h(t, e, n) { + var i, r; + d(t), d(e), d(n), i = a.length / 3, f((r = nt.generateTopUV(o, a, i - 3, i - 2, i - 1))[0]), f(r[1]), f(r[2]) + } + + function p(t, e, n, i) { + var r, s; + d(t), d(e), d(i), d(e), d(n), d(i), r = a.length / 3, f((s = nt.generateSideWallUV(o, a, r - 6, r - 3, r - 2, r - 1))[0]), f(s[1]), f(s[3]), f(s[1]), f(s[2]), f(s[3]) + } + + function d(t) { + a.push(q[3 * t + 0]), a.push(q[3 * t + 1]), a.push(q[3 * t + 2]) + } + + function f(t) { + s.push(t.x), s.push(t.y) + } + var m, g, v, y, x, b, _, w, M, S, T, A, L, C, P, E, N, O, D, I, z, R, F, k, B, U, j, V, G, W, H, q = [], + X = void 0 !== n.curveSegments ? n.curveSegments : 12, + Y = void 0 !== n.steps ? n.steps : 1, + Z = void 0 !== n.depth ? n.depth : 100, + J = void 0 !== n.bevelEnabled ? n.bevelEnabled : 1, + $ = void 0 !== n.bevelThickness ? n.bevelThickness : 6, + Q = void 0 !== n.bevelSize ? n.bevelSize : $ - 2, + K = void 0 !== n.bevelOffset ? n.bevelOffset : 0, + tt = void 0 !== n.bevelSegments ? n.bevelSegments : 3, + et = n.extrudePath, + nt = void 0 !== n.UVGenerator ? n.UVGenerator : qu; + if (void 0 !== n.amount && (Z = n.amount), g = 0, et && (m = et.getSpacedPoints(Y), g = 1, J = 0, v = et.computeFrenetFrames(Y, 0), y = new i, x = new i, b = new i), J || (tt = 0, $ = 0, Q = 0, K = 0), T = (S = t.extractPoints(X)).shape, A = S.holes, !Hu.isClockWise(T)) + for (T = T.reverse(), w = 0, M = A.length; w < M; w++) _ = A[w], Hu.isClockWise(_) && (A[w] = _.reverse()); + for (L = Hu.triangulateShape(T, A), C = T, w = 0, M = A.length; w < M; w++) _ = A[w], T = T.concat(_); + for (I = T.length, R = L.length, F = [], k = 0, U = (B = C.length) - 1, j = k + 1; k < B; k++, U++, j++) U === B && (U = 0), j === B && (j = 0), F[k] = c(C[k], C[U], C[j]); + for (V = [], W = F.concat(), w = 0, M = A.length; w < M; w++) { + for (_ = A[w], G = [], k = 0, U = (B = _.length) - 1, j = k + 1; k < B; k++, U++, j++) U === B && (U = 0), j === B && (j = 0), G[k] = c(_[k], _[U], _[j]); + V.push(G), W = W.concat(G) + } + for (P = 0; P < tt; P++) { + for (O = $ * Math.cos((N = P / tt) * Math.PI / 2), E = Q * Math.sin(N * Math.PI / 2) + K, k = 0, B = C.length; k < B; k++) u((D = r(C[k], F[k], E)).x, D.y, -O); + for (w = 0, M = A.length; w < M; w++) + for (_ = A[w], G = V[w], k = 0, B = _.length; k < B; k++) u((D = r(_[k], G[k], E)).x, D.y, -O) + } + for (E = Q + K, k = 0; k < I; k++) D = J ? r(T[k], W[k], E) : T[k], g ? (x.copy(v.normals[0]).multiplyScalar(D.x), y.copy(v.binormals[0]).multiplyScalar(D.y), b.copy(m[0]).add(x).add(y), u(b.x, b.y, b.z)) : u(D.x, D.y, 0); + for (H = 1; H <= Y; H++) + for (k = 0; k < I; k++) D = J ? r(T[k], W[k], E) : T[k], g ? (x.copy(v.normals[H]).multiplyScalar(D.x), y.copy(v.binormals[H]).multiplyScalar(D.y), b.copy(m[H]).add(x).add(y), u(b.x, b.y, b.z)) : u(D.x, D.y, Z / Y * H); + for (P = tt - 1; P >= 0; P--) { + for (O = $ * Math.cos((N = P / tt) * Math.PI / 2), E = Q * Math.sin(N * Math.PI / 2) + K, k = 0, B = C.length; k < B; k++) u((D = r(C[k], F[k], E)).x, D.y, Z + O); + for (w = 0, M = A.length; w < M; w++) + for (_ = A[w], G = V[w], k = 0, B = _.length; k < B; k++) D = r(_[k], G[k], E), g ? u(D.x, D.y + m[Y - 1].y, m[Y - 1].x + O) : u(D.x, D.y, Z + O) + }! function() { + var t, e = a.length / 3; + if (J) { + for (t = 0 * I, k = 0; k < R; k++) h((z = L[k])[2] + t, z[1] + t, z[0] + t); + for (t = I * (Y + 2 * tt), k = 0; k < R; k++) h((z = L[k])[0] + t, z[1] + t, z[2] + t) + } else { + for (k = 0; k < R; k++) h((z = L[k])[2], z[1], z[0]); + for (k = 0; k < R; k++) h((z = L[k])[0] + I * Y, z[1] + I * Y, z[2] + I * Y) + } + o.addGroup(e, a.length / 3 - e, 0) + }(), + function() { + var t = a.length / 3, + e = 0; + for (l(C, e), e += C.length, w = 0, M = A.length; w < M; w++) l(_ = A[w], e), e += _.length; + o.addGroup(t, a.length / 3 - t, 1) + }() + } + var o, a, s, c, l; + for (k.call(this), this.type = "ExtrudeBufferGeometry", this.parameters = { + shapes: t, + options: n + }, o = this, a = [], s = [], c = 0, l = (t = Array.isArray(t) ? t : [t]).length; c < l; c++) r(t[c]); + this.addAttribute("position", new I(a, 3)), this.addAttribute("uv", new I(s, 2)), this.computeVertexNormals() + } + + function ti(t, e, n) { + var i, r, o; + if (n.shapes = [], Array.isArray(t)) + for (i = 0, r = t.length; i < r; i++) o = t[i], n.shapes.push(o.uuid); + else n.shapes.push(t.uuid); + return void 0 !== e.extrudePath && (n.options.extrudePath = e.extrudePath.toJSON()), n + } + + function ei(t, e) { + V.call(this), this.type = "TextGeometry", this.parameters = { + text: t, + parameters: e + }, this.fromBufferGeometry(new ni(t, e)), this.mergeVertices() + } + + function ni(t, e) { + var n, i; + if (!(n = (e = e || {}).font) || !n.isFont) return new V; + i = n.generateShapes(t, e.size), e.depth = void 0 !== e.height ? e.height : 50, void 0 === e.bevelThickness && (e.bevelThickness = 10), void 0 === e.bevelSize && (e.bevelSize = 8), void 0 === e.bevelEnabled && (e.bevelEnabled = 0), Kn.call(this, i, e), this.type = "TextBufferGeometry" + } + + function ii(t, e, n, i, r, o, a) { + V.call(this), this.type = "SphereGeometry", this.parameters = { + radius: t, + widthSegments: e, + heightSegments: n, + phiStart: i, + phiLength: r, + thetaStart: o, + thetaLength: a + }, this.fromBufferGeometry(new ri(t, e, n, i, r, o, a)), this.mergeVertices() + } + + function ri(t, e, n, r, o, a, s) { + var c, l, u, h, p, d, f, m, g, v, y, x, b, _, w, M, S, T, A; + for (k.call(this), this.type = "SphereBufferGeometry", this.parameters = { + radius: t, + widthSegments: e, + heightSegments: n, + phiStart: r, + phiLength: o, + thetaStart: a, + thetaLength: s + }, t = t || 1, e = Math.max(3, Math.floor(e) || 8), n = Math.max(2, Math.floor(n) || 6), r = void 0 !== r ? r : 0, o = void 0 !== o ? o : 2 * Math.PI, c = Math.min((a = void 0 !== a ? a : 0) + (s = void 0 !== s ? s : Math.PI), Math.PI), h = 0, p = [], d = new i, f = new i, m = [], g = [], v = [], y = [], u = 0; u <= n; u++) { + for (x = [], b = u / n, _ = 0, 0 == u && 0 == a ? _ = .5 / e : u == n && c == Math.PI && (_ = -.5 / e), l = 0; l <= e; l++) w = l / e, d.x = -t * Math.cos(r + w * o) * Math.sin(a + b * s), d.y = t * Math.cos(a + b * s), d.z = t * Math.sin(r + w * o) * Math.sin(a + b * s), g.push(d.x, d.y, d.z), f.copy(d).normalize(), v.push(f.x, f.y, f.z), y.push(w + _, 1 - b), x.push(h++); + p.push(x) + } + for (u = 0; u < n; u++) + for (l = 0; l < e; l++) M = p[u][l + 1], S = p[u][l], T = p[u + 1][l], A = p[u + 1][l + 1], (0 !== u || a > 0) && m.push(M, S, A), (u !== n - 1 || c < Math.PI) && m.push(S, T, A); + this.setIndex(m), this.addAttribute("position", new I(g, 3)), this.addAttribute("normal", new I(v, 3)), this.addAttribute("uv", new I(y, 2)) + } + + function oi(t, e, n, i, r, o) { + V.call(this), this.type = "RingGeometry", this.parameters = { + innerRadius: t, + outerRadius: e, + thetaSegments: n, + phiSegments: i, + thetaStart: r, + thetaLength: o + }, this.fromBufferGeometry(new ai(t, e, n, i, r, o)), this.mergeVertices() + } + + function ai(t, n, r, o, a, s) { + var c, l, u, h, p, d, f, m, g, v, y, x, b, _, w, M; + for (k.call(this), this.type = "RingBufferGeometry", this.parameters = { + innerRadius: t, + outerRadius: n, + thetaSegments: r, + phiSegments: o, + thetaStart: a, + thetaLength: s + }, t = t || .5, n = n || 1, a = void 0 !== a ? a : 0, s = void 0 !== s ? s : 2 * Math.PI, r = void 0 !== r ? Math.max(3, r) : 8, c = [], l = [], u = [], h = [], d = t, f = (n - t) / (o = void 0 !== o ? Math.max(1, o) : 1), m = new i, g = new e, v = 0; v <= o; v++) { + for (y = 0; y <= r; y++) p = a + y / r * s, m.x = d * Math.cos(p), m.y = d * Math.sin(p), l.push(m.x, m.y, m.z), u.push(0, 0, 1), g.x = (m.x / n + 1) / 2, g.y = (m.y / n + 1) / 2, h.push(g.x, g.y); + d += f + } + for (v = 0; v < o; v++) + for (x = v * (r + 1), y = 0; y < r; y++) b = p = y + x, _ = p + r + 1, w = p + r + 2, M = p + 1, c.push(b, _, M), c.push(_, w, M); + this.setIndex(c), this.addAttribute("position", new I(l, 3)), this.addAttribute("normal", new I(u, 3)), this.addAttribute("uv", new I(h, 2)) + } + + function si(t, e, n, i) { + V.call(this), this.type = "LatheGeometry", this.parameters = { + points: t, + segments: e, + phiStart: n, + phiLength: i + }, this.fromBufferGeometry(new ci(t, e, n, i)), this.mergeVertices() + } + + function ci(t, n, r, o) { + var a, s, c, l, u, h, p, d, f, m, g, v, y, x, b, _, w, M, S, T; + for (k.call(this), this.type = "LatheBufferGeometry", this.parameters = { + points: t, + segments: n, + phiStart: r, + phiLength: o + }, n = Math.floor(n) || 12, r = r || 0, o = o || 2 * Math.PI, o = ic.clamp(o, 0, 2 * Math.PI), a = [], s = [], c = [], u = 1 / n, h = new i, p = new e, d = 0; d <= n; d++) + for (g = Math.sin(m = r + d * u * o), v = Math.cos(m), f = 0; f <= t.length - 1; f++) h.x = t[f].x * g, h.y = t[f].y, h.z = t[f].x * v, s.push(h.x, h.y, h.z), p.x = d / n, p.y = f / (t.length - 1), c.push(p.x, p.y); + for (d = 0; d < n; d++) + for (f = 0; f < t.length - 1; f++) y = l = f + d * t.length, x = l + t.length, b = l + t.length + 1, _ = l + 1, a.push(y, x, _), a.push(x, b, _); + if (this.setIndex(a), this.addAttribute("position", new I(s, 3)), this.addAttribute("uv", new I(c, 2)), this.computeVertexNormals(), o === 2 * Math.PI) + for (w = this.attributes.normal.array, M = new i, S = new i, T = new i, l = n * t.length * 3, d = 0, f = 0; d < t.length; d++, f += 3) M.x = w[f + 0], M.y = w[f + 1], M.z = w[f + 2], S.x = w[l + f + 0], S.y = w[l + f + 1], S.z = w[l + f + 2], T.addVectors(M, S).normalize(), w[f + 0] = w[l + f + 0] = T.x, w[f + 1] = w[l + f + 1] = T.y, w[f + 2] = w[l + f + 2] = T.z + } + + function li(t, e) { + V.call(this), this.type = "ShapeGeometry", "object" == typeof e && (e = e.curveSegments), this.parameters = { + shapes: t, + curveSegments: e + }, this.fromBufferGeometry(new ui(t, e)), this.mergeVertices() + } + + function ui(t, e) { + function n(t) { + var n, s, l, u, h, p, d, f, m, g = r.length / 3, + v = t.extractPoints(e), + y = v.shape, + x = v.holes; + for (0 == Hu.isClockWise(y) && (y = y.reverse()), n = 0, s = x.length; n < s; n++) l = x[n], 1 == Hu.isClockWise(l) && (x[n] = l.reverse()); + for (u = Hu.triangulateShape(y, x), n = 0, s = x.length; n < s; n++) l = x[n], y = y.concat(l); + for (n = 0, s = y.length; n < s; n++) h = y[n], r.push(h.x, h.y, 0), o.push(0, 0, 1), a.push(h.x, h.y); + for (n = 0, s = u.length; n < s; n++) d = (p = u[n])[0] + g, f = p[1] + g, m = p[2] + g, i.push(d, f, m), c += 3 + } + var i, r, o, a, s, c, l; + if (k.call(this), this.type = "ShapeBufferGeometry", this.parameters = { + shapes: t, + curveSegments: e + }, e = e || 12, i = [], r = [], o = [], a = [], s = 0, c = 0, 0 == Array.isArray(t)) n(t); + else + for (l = 0; l < t.length; l++) n(t[l]), this.addGroup(s, c, l), s += c, c = 0; + this.setIndex(i), this.addAttribute("position", new I(r, 3)), this.addAttribute("normal", new I(o, 3)), this.addAttribute("uv", new I(a, 2)) + } + + function hi(t, e) { + var n, i, r; + if (e.shapes = [], Array.isArray(t)) + for (n = 0, i = t.length; n < i; n++) r = t[n], e.shapes.push(r.uuid); + else e.shapes.push(t.uuid); + return e + } + + function pi(t, e) { + var n, i, r, o, a, s, c, l, u, h, p, d, f, m, g, v, y; + for (k.call(this), this.type = "EdgesGeometry", this.parameters = { + thresholdAngle: e + }, e = void 0 !== e ? e : 1, n = [], i = Math.cos(ic.DEG2RAD * e), r = [0, 0], o = {}, l = ["a", "b", "c"], t.isBufferGeometry ? (u = new V).fromBufferGeometry(t) : u = t.clone(), u.mergeVertices(), u.computeFaceNormals(), h = u.vertices, d = 0, f = (p = u.faces).length; d < f; d++) + for (m = p[d], g = 0; g < 3; g++) a = m[l[g]], s = m[l[(g + 1) % 3]], r[0] = Math.min(a, s), r[1] = Math.max(a, s), void 0 === o[c = r[0] + "," + r[1]] ? o[c] = { + index1: r[0], + index2: r[1], + face1: d, + face2: void 0 + } : o[c].face2 = d; + for (c in o)(void 0 === (v = o[c]).face2 || p[v.face1].normal.dot(p[v.face2].normal) <= i) && (y = h[v.index1], n.push(y.x, y.y, y.z), y = h[v.index2], n.push(y.x, y.y, y.z)); + this.addAttribute("position", new I(n, 3)) + } + + function di(t, e, n, i, r, o, a, s) { + V.call(this), this.type = "CylinderGeometry", this.parameters = { + radiusTop: t, + radiusBottom: e, + height: n, + radialSegments: i, + heightSegments: r, + openEnded: o, + thetaStart: a, + thetaLength: s + }, this.fromBufferGeometry(new fi(t, e, n, i, r, o, a, s)), this.mergeVertices() + } + + function fi(t, n, r, o, a, s, c, l) { + function u(r) { + var a, s, u, v, b, _, w, M = new e, + S = new i, + T = 0, + A = 1 == r ? t : n, + L = 1 == r ? 1 : -1, + C = g; + for (a = 1; a <= o; a++) d.push(0, y * L, 0), f.push(0, L, 0), m.push(.5, .5), g++; + for (s = g, a = 0; a <= o; a++) v = Math.cos(u = a / o * l + c), b = Math.sin(u), S.x = A * b, S.y = y * L, S.z = A * v, d.push(S.x, S.y, S.z), f.push(0, L, 0), M.x = .5 * v + .5, M.y = .5 * b * L + .5, m.push(M.x, M.y), g++; + for (a = 0; a < o; a++) _ = C + a, w = s + a, 1 == r ? p.push(w, w + 1, _) : p.push(w + 1, w, _), T += 3; + h.addGroup(x, T, 1 == r ? 1 : 2), x += T + } + var h, p, d, f, m, g, v, y, x; + k.call(this), this.type = "CylinderBufferGeometry", this.parameters = { + radiusTop: t, + radiusBottom: n, + height: r, + radialSegments: o, + heightSegments: a, + openEnded: s, + thetaStart: c, + thetaLength: l + }, h = this, t = void 0 !== t ? t : 1, n = void 0 !== n ? n : 1, r = r || 1, o = Math.floor(o) || 8, a = Math.floor(a) || 1, s = void 0 !== s ? s : 0, c = void 0 !== c ? c : 0, l = void 0 !== l ? l : 2 * Math.PI, p = [], d = [], f = [], m = [], g = 0, v = [], y = r / 2, x = 0, + function() { + var e, s, u, b, _, w, M, S, T, A, L, C, P, E = new i, + N = new i, + O = 0, + D = (n - t) / r; + for (s = 0; s <= a; s++) { + for (u = [], _ = (b = s / a) * (n - t) + t, e = 0; e <= o; e++) S = Math.sin(M = (w = e / o) * l + c), T = Math.cos(M), N.x = _ * S, N.y = -b * r + y, N.z = _ * T, d.push(N.x, N.y, N.z), E.set(S, D, T).normalize(), f.push(E.x, E.y, E.z), m.push(w, 1 - b), u.push(g++); + v.push(u) + } + for (e = 0; e < o; e++) + for (s = 0; s < a; s++) A = v[s][e], L = v[s + 1][e], C = v[s + 1][e + 1], P = v[s][e + 1], p.push(A, L, P), p.push(L, C, P), O += 6; + h.addGroup(x, O, 0), x += O + }(), 0 == s && (t > 0 && u(1), n > 0 && u(0)), this.setIndex(p), this.addAttribute("position", new I(d, 3)), this.addAttribute("normal", new I(f, 3)), this.addAttribute("uv", new I(m, 2)) + } + + function mi(t, e, n, i, r, o, a) { + di.call(this, 0, t, e, n, i, r, o, a), this.type = "ConeGeometry", this.parameters = { + radius: t, + height: e, + radialSegments: n, + heightSegments: i, + openEnded: r, + thetaStart: o, + thetaLength: a + } + } + + function gi(t, e, n, i, r, o, a) { + fi.call(this, 0, t, e, n, i, r, o, a), this.type = "ConeBufferGeometry", this.parameters = { + radius: t, + height: e, + radialSegments: n, + heightSegments: i, + openEnded: r, + thetaStart: o, + thetaLength: a + } + } + + function vi(t, e, n, i) { + V.call(this), this.type = "CircleGeometry", this.parameters = { + radius: t, + segments: e, + thetaStart: n, + thetaLength: i + }, this.fromBufferGeometry(new yi(t, e, n, i)), this.mergeVertices() + } + + function yi(t, n, r, o) { + var a, s, c, l, u, h, p, d, f; + for (k.call(this), this.type = "CircleBufferGeometry", this.parameters = { + radius: t, + segments: n, + thetaStart: r, + thetaLength: o + }, t = t || 1, n = void 0 !== n ? Math.max(3, n) : 8, r = void 0 !== r ? r : 0, o = void 0 !== o ? o : 2 * Math.PI, a = [], s = [], c = [], l = [], p = new i, d = new e, s.push(0, 0, 0), c.push(0, 0, 1), l.push(.5, .5), h = 0, u = 3; h <= n; h++, u += 3) f = r + h / n * o, p.x = t * Math.cos(f), p.y = t * Math.sin(f), s.push(p.x, p.y, p.z), c.push(0, 0, 1), d.x = (s[u] / t + 1) / 2, d.y = (s[u + 1] / t + 1) / 2, l.push(d.x, d.y); + for (u = 1; u <= n; u++) a.push(u, u + 1, 0); + this.setIndex(a), this.addAttribute("position", new I(s, 3)), this.addAttribute("normal", new I(c, 3)), this.addAttribute("uv", new I(l, 2)) + } + + function xi(t) { + S.call(this), this.type = "ShadowMaterial", this.color = new x(0), this.transparent = 1, this.setValues(t) + } + + function bi(t) { + H.call(this, t), this.type = "RawShaderMaterial" + } + + function _i(t) { + S.call(this), this.defines = { + STANDARD: "" + }, this.type = "MeshStandardMaterial", this.color = new x(16777215), this.roughness = .5, this.metalness = .5, this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new x(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = $s, this.normalScale = new e(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.roughnessMap = null, this.metalnessMap = null, this.alphaMap = null, this.envMap = null, this.envMapIntensity = 1, this.refractionRatio = .98, this.wireframe = 0, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = 0, this.morphTargets = 0, this.morphNormals = 0, this.setValues(t) + } + + function wi(t) { + _i.call(this), this.defines = { + STANDARD: "", + PHYSICAL: "" + }, this.type = "MeshPhysicalMaterial", this.reflectivity = .5, this.clearcoat = 0, this.clearcoatRoughness = 0, this.sheen = null, this.clearcoatNormalScale = new e(1, 1), this.clearcoatNormalMap = null, this.transparency = 0, this.setValues(t) + } + + function Mi(t) { + S.call(this), this.type = "MeshPhongMaterial", this.color = new x(16777215), this.specular = new x(1118481), this.shininess = 30, this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new x(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = $s, this.normalScale = new e(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = wa, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = 0, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = 0, this.morphTargets = 0, this.morphNormals = 0, this.setValues(t) + } + + function Si(t) { + Mi.call(this), this.defines = { + TOON: "" + }, this.type = "MeshToonMaterial", this.gradientMap = null, this.setValues(t) + } + + function Ti(t) { + S.call(this), this.type = "MeshNormalMaterial", this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = $s, this.normalScale = new e(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.wireframe = 0, this.wireframeLinewidth = 1, this.fog = 0, this.skinning = 0, this.morphTargets = 0, this.morphNormals = 0, this.setValues(t) + } + + function Ai(t) { + S.call(this), this.type = "MeshLambertMaterial", this.color = new x(16777215), this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new x(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = wa, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = 0, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = 0, this.morphTargets = 0, this.morphNormals = 0, this.setValues(t) + } + + function Li(t) { + S.call(this), this.defines = { + MATCAP: "" + }, this.type = "MeshMatcapMaterial", this.color = new x(16777215), this.matcap = null, this.map = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = $s, this.normalScale = new e(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.alphaMap = null, this.skinning = 0, this.morphTargets = 0, this.morphNormals = 0, this.setValues(t) + } + + function Ci(t) { + Qe.call(this), this.type = "LineDashedMaterial", this.scale = 1, this.dashSize = 3, this.gapSize = 1, this.setValues(t) + } + + function Pi(t, e, n, i) { + this.parameterPositions = t, this._cachedIndex = 0, this.resultBuffer = void 0 !== i ? i : new e.constructor(n), this.sampleValues = e, this.valueSize = n + } + + function Ei(t, e, n, i) { + Pi.call(this, t, e, n, i), this._weightPrev = -0, this._offsetPrev = -0, this._weightNext = -0, this._offsetNext = -0 + } + + function Ni(t, e, n, i) { + Pi.call(this, t, e, n, i) + } + + function Oi(t, e, n, i) { + Pi.call(this, t, e, n, i) + } + + function Di(t, e, n, i) { + if (void 0 === t) throw Error("THREE.KeyframeTrack: track name is undefined"); + if (void 0 === e || 0 === e.length) throw Error("THREE.KeyframeTrack: no keyframes in track named " + t); + this.name = t, this.times = Zu.convertArray(e, this.TimeBufferType), this.values = Zu.convertArray(n, this.ValueBufferType), this.setInterpolation(i || this.DefaultInterpolation) + } + + function Ii(t, e, n) { + Di.call(this, t, e, n) + } + + function zi(t, e, n, i) { + Di.call(this, t, e, n, i) + } + + function Ri(t, e, n, i) { + Di.call(this, t, e, n, i) + } + + function Fi(t, e, n, i) { + Pi.call(this, t, e, n, i) + } + + function ki(t, e, n, i) { + Di.call(this, t, e, n, i) + } + + function Bi(t, e, n, i) { + Di.call(this, t, e, n, i) + } + + function Ui(t, e, n, i) { + Di.call(this, t, e, n, i) + } + + function ji(t, e, n) { + this.name = t, this.tracks = n, this.duration = void 0 !== e ? e : -1, this.uuid = ic.generateUUID(), this.duration < 0 && this.resetDuration() + } + + function Vi(t) { + var e, n, i; + if (void 0 === t.type) throw Error("THREE.KeyframeTrack: track type undefined, can not parse"); + return e = function(t) { + switch (t.toLowerCase()) { + case "scalar": + case "double": + case "float": + case "number": + case "integer": + return Ri; + case "vector": + case "vector2": + case "vector3": + case "vector4": + return Ui; + case "color": + return zi; + case "quaternion": + return ki; + case "bool": + case "boolean": + return Ii; + case "string": + return Bi + } + throw Error("THREE.KeyframeTrack: Unsupported typeName: " + t) + }(t.type), void 0 === t.times && (n = [], i = [], Zu.flattenJSON(t.keys, n, i, "value"), t.times = n, t.values = i), void 0 !== e.parse ? e.parse(t) : new e(t.name, t.times, t.values, t.interpolation) + } + + function Gi(t, e, n) { + var i = this, + r = 0, + o = 0, + a = 0, + s = void 0, + c = []; + this.onStart = void 0, this.onLoad = t, this.onProgress = e, this.onError = n, this.itemStart = function(t) { + a++, 0 == r && void 0 !== i.onStart && i.onStart(t, o, a), r = 1 + }, this.itemEnd = function(t) { + o++, void 0 !== i.onProgress && i.onProgress(t, o, a), o === a && (r = 0, void 0 !== i.onLoad && i.onLoad()) + }, this.itemError = function(t) { + void 0 !== i.onError && i.onError(t) + }, this.resolveURL = function(t) { + return s ? s(t) : t + }, this.setURLModifier = function(t) { + return s = t, this + }, this.addHandler = function(t, e) { + return c.push(t, e), this + }, this.removeHandler = function(t) { + var e = c.indexOf(t); + return -1 !== e && c.splice(e, 2), this + }, this.getHandler = function(t) { + var e, n, i, r; + for (e = 0, n = c.length; e < n; e += 2) + if (i = c[e], r = c[e + 1], i.test(t)) return r; + return null + } + } + + function Wi(t) { + this.manager = void 0 !== t ? t : $u, this.crossOrigin = "anonymous", this.path = "", this.resourcePath = "" + } + + function Hi(t) { + Wi.call(this, t) + } + + function qi(t) { + Wi.call(this, t) + } + + function Xi(t) { + Wi.call(this, t) + } + + function Yi(t) { + Wi.call(this, t) + } + + function Zi(t) { + Wi.call(this, t) + } + + function Ji(t) { + Wi.call(this, t) + } + + function $i(t) { + Wi.call(this, t) + } + + function Qi() { + this.type = "Curve", this.arcLengthDivisions = 200 + } + + function Ki(t, e, n, i, r, o, a, s) { + Qi.call(this), this.type = "EllipseCurve", this.aX = t || 0, this.aY = e || 0, this.xRadius = n || 1, this.yRadius = i || 1, this.aStartAngle = r || 0, this.aEndAngle = o || 2 * Math.PI, this.aClockwise = a || 0, this.aRotation = s || 0 + } + + function tr(t, e, n, i, r, o) { + Ki.call(this, t, e, n, n, i, r, o), this.type = "ArcCurve" + } + + function er() { + function t(t, o, a, s) { + e = t, n = a, i = -3 * t + 3 * o - 2 * a - s, r = 2 * t - 2 * o + a + s + } + var e = 0, + n = 0, + i = 0, + r = 0; + return { + initCatmullRom: function(e, n, i, r, o) { + t(n, i, o * (i - e), o * (r - n)) + }, + initNonuniformCatmullRom: function(e, n, i, r, o, a, s) { + var c = (n - e) / o - (i - e) / (o + a) + (i - n) / a, + l = (i - n) / a - (r - n) / (a + s) + (r - i) / s; + t(n, i, c *= a, l *= a) + }, + calc: function(t) { + var o = t * t; + return e + n * t + i * o + r * (o * t) + } + } + } + + function nr(t, e, n, i) { + Qi.call(this), this.type = "CatmullRomCurve3", this.points = t || [], this.closed = e || 0, this.curveType = n || "centripetal", this.tension = i || .5 + } + + function ir(t, e, n, i, r) { + var o = .5 * (i - e), + a = .5 * (r - n), + s = t * t; + return (2 * n - 2 * i + o + a) * (t * s) + (-3 * n + 3 * i - 2 * o - a) * s + o * t + n + } + + function rr(t, e, n, i) { + return function(t) { + var n = 1 - t; + return n * n * e + }(t) + function(t) { + return 2 * (1 - t) * t * n + }(t) + function(t) { + return t * t * i + }(t) + } + + function or(t, e, n, i, r) { + return function(t) { + var n = 1 - t; + return n * n * n * e + }(t) + function(t) { + var e = 1 - t; + return 3 * e * e * t * n + }(t) + function(t) { + return 3 * (1 - t) * t * t * i + }(t) + function(t) { + return t * t * t * r + }(t) + } + + function ar(t, n, i, r) { + Qi.call(this), this.type = "CubicBezierCurve", this.v0 = t || new e, this.v1 = n || new e, this.v2 = i || new e, this.v3 = r || new e + } + + function sr(t, e, n, r) { + Qi.call(this), this.type = "CubicBezierCurve3", this.v0 = t || new i, this.v1 = e || new i, this.v2 = n || new i, this.v3 = r || new i + } + + function cr(t, n) { + Qi.call(this), this.type = "LineCurve", this.v1 = t || new e, this.v2 = n || new e + } + + function lr(t, e) { + Qi.call(this), this.type = "LineCurve3", this.v1 = t || new i, this.v2 = e || new i + } + + function ur(t, n, i) { + Qi.call(this), this.type = "QuadraticBezierCurve", this.v0 = t || new e, this.v1 = n || new e, this.v2 = i || new e + } + + function hr(t, e, n) { + Qi.call(this), this.type = "QuadraticBezierCurve3", this.v0 = t || new i, this.v1 = e || new i, this.v2 = n || new i + } + + function pr(t) { + Qi.call(this), this.type = "SplineCurve", this.points = t || [] + } + + function dr() { + Qi.call(this), this.type = "CurvePath", this.curves = [], this.autoClose = 0 + } + + function fr(t) { + dr.call(this), this.type = "Path", this.currentPoint = new e, t && this.setFromPoints(t) + } + + function mr(t) { + fr.call(this, t), this.uuid = ic.generateUUID(), this.type = "Shape", this.holes = [] + } + + function gr(t, e) { + p.call(this), this.type = "Light", this.color = new x(t), this.intensity = void 0 !== e ? e : 1, this.receiveShadow = void 0 + } + + function vr(t, e, n) { + gr.call(this, t, n), this.type = "HemisphereLight", this.castShadow = void 0, this.position.copy(p.DefaultUp), this.updateMatrix(), this.groundColor = new x(e) + } + + function yr(t) { + this.camera = t, this.bias = 0, this.radius = 1, this.mapSize = new e(512, 512), this.map = null, this.mapPass = null, this.matrix = new l, this._frustum = new Q, this._frameExtents = new e(1, 1), this._viewportCount = 1, this._viewports = [new a(0, 0, 1, 1)] + } + + function xr() { + yr.call(this, new X(50, 1, .5, 500)) + } + + function br(t, e, n, i, r, o) { + gr.call(this, t, e), this.type = "SpotLight", this.position.copy(p.DefaultUp), this.updateMatrix(), this.target = new p, Object.defineProperty(this, "power", { + get: function() { + return this.intensity * Math.PI + }, + set: function(t) { + this.intensity = t / Math.PI + } + }), this.distance = void 0 !== n ? n : 0, this.angle = void 0 !== i ? i : Math.PI / 3, this.penumbra = void 0 !== r ? r : 0, this.decay = void 0 !== o ? o : 1, this.shadow = new xr + } + + function _r() { + yr.call(this, new X(90, 1, .5, 500)), this._frameExtents = new e(4, 2), this._viewportCount = 6, this._viewports = [new a(2, 1, 1, 1), new a(0, 1, 1, 1), new a(3, 1, 1, 1), new a(1, 1, 1, 1), new a(3, 0, 1, 1), new a(1, 0, 1, 1)], this._cubeDirections = [new i(1, 0, 0), new i(-1, 0, 0), new i(0, 0, 1), new i(0, 0, -1), new i(0, 1, 0), new i(0, -1, 0)], this._cubeUps = [new i(0, 1, 0), new i(0, 1, 0), new i(0, 1, 0), new i(0, 1, 0), new i(0, 0, 1), new i(0, 0, -1)] + } + + function wr(t, e, n, i) { + gr.call(this, t, e), this.type = "PointLight", Object.defineProperty(this, "power", { + get: function() { + return 4 * this.intensity * Math.PI + }, + set: function(t) { + this.intensity = t / (4 * Math.PI) + } + }), this.distance = void 0 !== n ? n : 0, this.decay = void 0 !== i ? i : 1, this.shadow = new _r + } + + function Mr(t, e, n, i, r, o) { + q.call(this), this.type = "OrthographicCamera", this.zoom = 1, this.view = null, this.left = void 0 !== t ? t : -1, this.right = void 0 !== e ? e : 1, this.top = void 0 !== n ? n : 1, this.bottom = void 0 !== i ? i : -1, this.near = void 0 !== r ? r : .1, this.far = void 0 !== o ? o : 2e3, this.updateProjectionMatrix() + } + + function Sr() { + yr.call(this, new Mr(-5, 5, 5, -5, .5, 500)) + } + + function Tr(t, e) { + gr.call(this, t, e), this.type = "DirectionalLight", this.position.copy(p.DefaultUp), this.updateMatrix(), this.target = new p, this.shadow = new Sr + } + + function Ar(t, e) { + gr.call(this, t, e), this.type = "AmbientLight", this.castShadow = void 0 + } + + function Lr(t, e, n, i) { + gr.call(this, t, e), this.type = "RectAreaLight", this.width = void 0 !== n ? n : 10, this.height = void 0 !== i ? i : 10 + } + + function Cr(t) { + Wi.call(this, t), this.textures = {} + } + + function Pr() { + k.call(this), this.type = "InstancedBufferGeometry", this.maxInstancedCount = void 0 + } + + function Er(t, e, n, i) { + "number" == typeof n && (i = n, n = 0), A.call(this, t, e, n), this.meshPerAttribute = i || 1 + } + + function Nr(t) { + Wi.call(this, t) + } + + function Or(t) { + Wi.call(this, t) + } + + function Dr(t) { + Wi.call(this, t), this.options = void 0 + } + + function Ir() { + this.type = "ShapePath", this.color = new x, this.subPaths = [], this.currentPath = null + } + + function zr(t) { + this.type = "Font", this.data = t + } + + function Rr(t, e, n, i, r) { + var o, a, s, c, l, u, h, p, d, f, m, g, v = r.glyphs[t] || r.glyphs["?"]; + if (v) { + if (o = new Ir, v.o) + for (m = 0, g = (f = v._cachedOutline || (v._cachedOutline = v.o.split(" "))).length; m < g;) switch (f[m++]) { + case "m": + a = f[m++] * e + n, s = f[m++] * e + i, o.moveTo(a, s); + break; + case "l": + a = f[m++] * e + n, s = f[m++] * e + i, o.lineTo(a, s); + break; + case "q": + c = f[m++] * e + n, l = f[m++] * e + i, u = f[m++] * e + n, h = f[m++] * e + i, o.quadraticCurveTo(u, h, c, l); + break; + case "b": + c = f[m++] * e + n, l = f[m++] * e + i, u = f[m++] * e + n, h = f[m++] * e + i, p = f[m++] * e + n, d = f[m++] * e + i, o.bezierCurveTo(u, h, p, d, c, l) + } + return { + offsetX: v.ha * e, + path: o + } + } + } + + function Fr(t) { + Wi.call(this, t) + } + + function kr(t) { + Wi.call(this, t) + } + + function Br() { + this.coefficients = []; + for (var t = 0; t < 9; t++) this.coefficients.push(new i) + } + + function Ur(t, e) { + gr.call(this, void 0, e), this.sh = void 0 !== t ? t : new Br + } + + function jr(t, e, n) { + var r, o, a, s, c; + Ur.call(this, void 0, n), r = (new x).set(t), o = (new x).set(e), a = new i(r.r, r.g, r.b), s = new i(o.r, o.g, o.b), c = 1.7724538509055159 * Math.sqrt(.75), this.sh.coefficients[0].copy(a).add(s).multiplyScalar(1.7724538509055159), this.sh.coefficients[1].copy(a).sub(s).multiplyScalar(c) + } + + function Vr(t, e) { + Ur.call(this, void 0, e); + var n = (new x).set(t); + this.sh.coefficients[0].set(n.r, n.g, n.b).multiplyScalar(3.5449077018110318) + } + + function Gr(t) { + this.autoStart = void 0 !== t ? t : 1, this.startTime = 0, this.oldTime = 0, this.elapsedTime = 0, this.running = 0 + } + + function Wr() { + p.call(this), this.type = "AudioListener", this.context = uh.getContext(), this.gain = this.context.createGain(), this.gain.connect(this.context.destination), this.filter = null, this.timeDelta = 0, this._clock = new Gr + } + + function Hr(t) { + p.call(this), this.type = "Audio", this.listener = t, this.context = t.context, this.gain = this.context.createGain(), this.gain.connect(t.getInput()), this.autoplay = 0, this.buffer = null, this.detune = 0, this.loop = 0, this.startTime = 0, this.offset = 0, this.duration = void 0, this.playbackRate = 1, this.isPlaying = 0, this.hasPlaybackControl = 1, this.sourceType = "empty", this.filters = [] + } + + function qr(t) { + Hr.call(this, t), this.panner = this.context.createPanner(), this.panner.panningModel = "HRTF", this.panner.connect(this.gain) + } + + function Xr(t, e) { + this.analyser = t.context.createAnalyser(), this.analyser.fftSize = void 0 !== e ? e : 2048, this.data = new Uint8Array(this.analyser.frequencyBinCount), t.getOutput().connect(this.analyser) + } + + function Yr(t, e, n) { + this.binding = t, this.valueSize = n; + var i, r = Float64Array; + switch (e) { + case "quaternion": + i = this._slerp; + break; + case "string": + case "bool": + r = Array, i = this._select; + break; + default: + i = this._lerp + } + this.buffer = new r(4 * n), this._mixBufferRegion = i, this.cumulativeWeight = 0, this.useCount = 0, this.referenceCount = 0 + } + + function Zr(t, e, n) { + var i = n || Jr.parseTrackName(e); + this._targetGroup = t, this._bindings = t.subscribe_(e, i) + } + + function Jr(t, e, n) { + this.path = e, this.parsedPath = n || Jr.parseTrackName(e), this.node = Jr.findNode(t, this.parsedPath.nodeName) || t, this.rootNode = t + } + + function $r(t, e, n) { + var i, r, o, a, s, c; + for (this._mixer = t, this._clip = e, this._localRoot = n || null, r = (i = e.tracks).length, o = Array(r), a = { + endingStart: Fs, + endingEnd: Fs + }, s = 0; s !== r; ++s) c = i[s].createInterpolant(null), o[s] = c, c.settings = a; + this._interpolantSettings = a, this._interpolants = o, this._propertyBindings = Array(r), this._cacheIndex = null, this._byClipCacheIndex = null, this._timeScaleInterpolant = null, this._weightInterpolant = null, this.loop = Rs, this._loopCount = -1, this._startTime = null, this.time = 0, this.timeScale = 1, this._effectiveTimeScale = 1, this.weight = 1, this._effectiveWeight = 1, this.repetitions = 1 / 0, this.paused = 0, this.enabled = 1, this.clampWhenFinished = 0, this.zeroSlopeAtStart = 1, this.zeroSlopeAtEnd = 1 + } + + function Qr(t) { + this._root = t, this._initMemoryManager(), this._accuIndex = 0, this.time = 0, this.timeScale = 1 + } + + function Kr(t, e) { + "string" == typeof t && (t = e), this.value = t + } + + function to(t, e, n) { + Ve.call(this, t, e), this.meshPerAttribute = n || 1 + } + + function eo(t, e) { + return t.distance - e.distance + } + + function no(t, e, n, i) { + var r, o, a; + if (0 != t.visible && (t.raycast(e, n), 1 == i)) + for (o = 0, a = (r = t.children).length; o < a; o++) no(r[o], e, n, 1) + } + + function io(t, n) { + this.min = void 0 !== t ? t : new e(1 / 0, 1 / 0), this.max = void 0 !== n ? n : new e(-1 / 0, -1 / 0) + } + + function ro(t, e) { + this.start = void 0 !== t ? t : new i, this.end = void 0 !== e ? e : new i + } + + function oo(t) { + p.call(this), this.material = t, this.render = function() {} + } + + function ao(t, e, n, i) { + var r, o, a, s, c, l; + this.object = t, this.size = void 0 !== e ? e : 1, r = void 0 !== n ? n : 16711680, o = void 0 !== i ? i : 1, a = 0, (s = this.object.geometry) && s.isGeometry ? a = 3 * s.faces.length : s && s.isBufferGeometry && (a = s.attributes.normal.count), c = new k, l = new I(2 * a * 3, 3), c.addAttribute("position", l), tn.call(this, c, new Qe({ + color: r, + linewidth: o + })), this.matrixAutoUpdate = 0, this.update() + } + + function so(t, e) { + var n, i, r, o, a, s; + for (p.call(this), this.light = t, this.light.updateMatrixWorld(), this.matrix = t.matrixWorld, this.matrixAutoUpdate = 0, this.color = e, n = new k, i = [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, -1, 1], r = 0, o = 1, 32; r < 32; r++, o++) 0, a = o / 32 * Math.PI * 2, i.push(1, 0, 1, Math.cos(a), Math.sin(a), 1); + n.addAttribute("position", new I(i, 3)), s = new Qe({ + fog: 0 + }), this.cone = new tn(n, s), this.add(this.cone), this.update() + } + + function co(t) { + var e, n, i, r = function t(e) { + var n, i = []; + for (e && e.isBone && i.push(e), n = 0; n < e.children.length; n++) i.push.apply(i, t(e.children[n])); + return i + }(t), + o = new k, + a = [], + s = [], + c = new x(0, 0, 1), + l = new x(0, 1, 0); + for (e = 0; e < r.length; e++)(n = r[e]).parent && n.parent.isBone && (a.push(0, 0, 0), a.push(0, 0, 0), s.push(c.r, c.g, c.b), s.push(l.r, l.g, l.b)); + o.addAttribute("position", new I(a, 3)), o.addAttribute("color", new I(s, 3)), i = new Qe({ + vertexColors: Ho, + depthTest: 0, + depthWrite: 0, + transparent: 1 + }), tn.call(this, o, i), this.root = t, this.bones = r, this.matrix = t.matrixWorld, this.matrixAutoUpdate = 0 + } + + function lo(t, e, n) { + var i, r; + this.light = t, this.light.updateMatrixWorld(), this.color = n, i = new ri(e, 4, 2), r = new T({ + wireframe: 1, + fog: 0 + }), B.call(this, i, r), this.matrix = this.light.matrixWorld, this.matrixAutoUpdate = 0, this.update() + } + + function uo(t, e) { + var n, i, r, o, a; + this.type = "RectAreaLightHelper", this.light = t, this.color = e, n = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0, 1, 1, 0], (i = new k).addAttribute("position", new I(n, 3)), i.computeBoundingSphere(), r = new Qe({ + fog: 0 + }), Ke.call(this, i, r), o = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0], (a = new k).addAttribute("position", new I(o, 3)), a.computeBoundingSphere(), this.add(new B(a, new T({ + side: jo, + fog: 0 + }))), this.update() + } + + function ho(t, e, n) { + var i, r, o; + p.call(this), this.light = t, this.light.updateMatrixWorld(), this.matrix = t.matrixWorld, this.matrixAutoUpdate = 0, this.color = n, (i = new yn(e)).rotateY(.5 * Math.PI), this.material = new T({ + wireframe: 1, + fog: 0 + }), void 0 === this.color && (this.material.vertexColors = Ho), r = i.getAttribute("position"), o = new Float32Array(3 * r.count), i.addAttribute("color", new A(o, 3)), this.add(new B(i, this.material)), this.update() + } + + function po(t, e) { + var n, i, r; + this.lightProbe = t, this.size = e, (n = {}).GAMMA_OUTPUT = "", i = new H({ + defines: n, + uniforms: { + sh: { + value: this.lightProbe.sh.coefficients + }, + intensity: { + value: this.lightProbe.intensity + } + }, + vertexShader: "varying vec3 vNormal;\nvoid main() {\n\tvNormal = normalize( normalMatrix * normal );\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}", + fragmentShader: "#define RECIPROCAL_PI 0.318309886\nvec3 inverseTransformDirection( in vec3 normal, in mat4 matrix ) {\n\t// matrix is assumed to be orthogonal\n\treturn normalize( ( vec4( normal, 0.0 ) * matrix ).xyz );\n}\nvec3 linearToOutput( in vec3 a ) {\n\t#ifdef GAMMA_OUTPUT\n\t\treturn pow( a, vec3( 1.0 / float( GAMMA_FACTOR ) ) );\n\t#else\n\t\treturn a;\n\t#endif\n}\n// source: https://graphics.stanford.edu/papers/envmap/envmap.pdf\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\t// normal is assumed to have unit length\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\t// band 0\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\t// band 1\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\t// band 2\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nuniform vec3 sh[ 9 ]; // sh coefficients\nuniform float intensity; // light probe intensity\nvarying vec3 vNormal;\nvoid main() {\n\tvec3 normal = normalize( vNormal );\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, sh );\n\tvec3 outgoingLight = RECIPROCAL_PI * irradiance * intensity;\n\toutgoingLight = linearToOutput( outgoingLight );\n\tgl_FragColor = vec4( outgoingLight, 1.0 );\n}" + }), r = new ri(1, 32, 16), B.call(this, r, i), this.onBeforeRender() + } + + function fo(t, e, n, i) { + var r, o, a, s, c, l, u, h, p, d, f; + for (t = t || 10, e = e || 10, n = new x(void 0 !== n ? n : 4473924), i = new x(void 0 !== i ? i : 8947848), r = e / 2, o = t / e, s = [], c = [], l = 0, u = 0, h = -(a = t / 2); l <= e; l++, h += o) s.push(-a, 0, h, a, 0, h), s.push(h, 0, -a, h, 0, a), (p = l === r ? n : i).toArray(c, u), u += 3, p.toArray(c, u), u += 3, p.toArray(c, u), u += 3, p.toArray(c, u), u += 3; + (d = new k).addAttribute("position", new I(s, 3)), d.addAttribute("color", new I(c, 3)), f = new Qe({ + vertexColors: Ho + }), tn.call(this, d, f) + } + + function mo(t, e, n, i, r, o) { + var a, s, c, l, u, h, p, d, f, m, g; + for (t = t || 10, e = e || 16, n = n || 8, i = i || 64, r = new x(void 0 !== r ? r : 4473924), o = new x(void 0 !== o ? o : 8947848), a = [], s = [], h = 0; h <= e; h++) c = Math.sin(u = h / e * (2 * Math.PI)) * t, l = Math.cos(u) * t, a.push(0, 0, 0), a.push(c, 0, l), f = 1 & h ? r : o, s.push(f.r, f.g, f.b), s.push(f.r, f.g, f.b); + for (h = 0; h <= n; h++) + for (f = 1 & h ? r : o, d = t - t / n * h, p = 0; p < i; p++) c = Math.sin(u = p / i * (2 * Math.PI)) * d, l = Math.cos(u) * d, a.push(c, 0, l), s.push(f.r, f.g, f.b), c = Math.sin(u = (p + 1) / i * (2 * Math.PI)) * d, l = Math.cos(u) * d, a.push(c, 0, l), s.push(f.r, f.g, f.b); + (m = new k).addAttribute("position", new I(a, 3)), m.addAttribute("color", new I(s, 3)), g = new Qe({ + vertexColors: Ho + }), tn.call(this, m, g) + } + + function go(t, e, n, i) { + var r, o, a, s, c; + this.audio = t, this.range = e || 1, this.divisionsInnerAngle = n || 16, this.divisionsOuterAngle = i || 2, r = new k, o = this.divisionsInnerAngle + 2 * this.divisionsOuterAngle, a = new Float32Array(3 * (3 * o + 3)), r.addAttribute("position", new A(a, 3)), s = new Qe({ + color: 65280 + }), c = new Qe({ + color: 16776960 + }), Ke.call(this, r, [c, s]), this.update() + } + + function vo(t, e, n, i) { + var r, o, a, s, c, l; + this.object = t, this.size = void 0 !== e ? e : 1, r = void 0 !== n ? n : 16776960, o = void 0 !== i ? i : 1, a = 0, (s = this.object.geometry) && s.isGeometry && (a = s.faces.length), c = new k, l = new I(2 * a * 3, 3), c.addAttribute("position", l), tn.call(this, c, new Qe({ + color: r, + linewidth: o + })), this.matrixAutoUpdate = 0, this.update() + } + + function yo(t, e, n) { + var i, r; + p.call(this), this.light = t, this.light.updateMatrixWorld(), this.matrix = t.matrixWorld, this.matrixAutoUpdate = 0, this.color = n, void 0 === e && (e = 1), (i = new k).addAttribute("position", new I([-e, e, 0, e, e, 0, e, -e, 0, -e, -e, 0, -e, e, 0], 3)), r = new Qe({ + fog: 0 + }), this.lightPlane = new Ke(i, r), this.add(this.lightPlane), (i = new k).addAttribute("position", new I([0, 0, 0, 0, 0, 1], 3)), this.targetLine = new Ke(i, r), this.add(this.targetLine), this.update() + } + + function xo(t) { + function e(t, e, i) { + n(t, i), n(e, i) + } + + function n(t, e) { + o.push(0, 0, 0), a.push(e.r, e.g, e.b), void 0 === s[t] && (s[t] = []), s[t].push(o.length / 3 - 1) + } + var i = new k, + r = new Qe({ + color: 16777215, + vertexColors: Wo + }), + o = [], + a = [], + s = {}, + c = new x(16755200), + l = new x(16711680), + u = new x(43775), + h = new x(16777215), + p = new x(3355443); + e("n1", "n2", c), e("n2", "n4", c), e("n4", "n3", c), e("n3", "n1", c), e("f1", "f2", c), e("f2", "f4", c), e("f4", "f3", c), e("f3", "f1", c), e("n1", "f1", c), e("n2", "f2", c), e("n3", "f3", c), e("n4", "f4", c), e("p", "n1", l), e("p", "n2", l), e("p", "n3", l), e("p", "n4", l), e("u1", "u2", u), e("u2", "u3", u), e("u3", "u1", u), e("c", "t", h), e("p", "c", p), e("cn1", "cn2", p), e("cn3", "cn4", p), e("cf1", "cf2", p), e("cf3", "cf4", p), i.addAttribute("position", new I(o, 3)), i.addAttribute("color", new I(a, 3)), tn.call(this, i, r), this.camera = t, this.camera.updateProjectionMatrix && this.camera.updateProjectionMatrix(), this.matrix = t.matrixWorld, this.matrixAutoUpdate = 0, this.pointMap = s, this.update() + } + + function bo(t, e, n, i, r, o, a) { + var s, c, l, u; + if (Yh.set(r, o, a).unproject(i), void 0 !== (s = e[t])) + for (c = n.getAttribute("position"), l = 0, u = s.length; l < u; l++) c.setXYZ(s[l], Yh.x, Yh.y, Yh.z) + } + + function _o(t, e) { + var n, i, r; + this.object = t, void 0 === e && (e = 16776960), n = 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]), i = new Float32Array(24), (r = new k).setIndex(new A(n, 1)), r.addAttribute("position", new A(i, 3)), tn.call(this, r, new Qe({ + color: e + })), this.matrixAutoUpdate = 0, this.update() + } + + function wo(t, e) { + var n, i, r; + this.type = "Box3Helper", this.box = t, e = e || 16776960, n = 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]), i = [1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1], (r = new k).setIndex(new A(n, 1)), r.addAttribute("position", new I(i, 3)), tn.call(this, r, new Qe({ + color: e + })), this.geometry.computeBoundingSphere() + } + + function Mo(t, e, n) { + var i, r, o, a, s; + this.type = "PlaneHelper", this.plane = t, this.size = void 0 === e ? 1 : e, i = void 0 !== n ? n : 16776960, r = [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], (o = new k).addAttribute("position", new I(r, 3)), o.computeBoundingSphere(), Ke.call(this, o, new Qe({ + color: i + })), a = [1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1], (s = new k).addAttribute("position", new I(a, 3)), s.computeBoundingSphere(), this.add(new B(s, new T({ + color: i, + opacity: .2, + transparent: 1, + depthWrite: 0 + }))) + } + + function So(t, e, n, r, o, a) { + p.call(this), void 0 === t && (t = new i(0, 0, 1)), void 0 === e && (e = new i(0, 0, 0)), void 0 === n && (n = 1), void 0 === r && (r = 16776960), void 0 === o && (o = .2 * n), void 0 === a && (a = .2 * o), void 0 === Qh && ((Qh = new k).addAttribute("position", new I([0, 0, 0, 0, 1, 0], 3)), (Kh = new fi(0, .5, 1, 5, 1)).translate(0, -.5, 0)), this.position.copy(e), this.line = new Ke(Qh, new Qe({ + color: r + })), this.line.matrixAutoUpdate = 0, this.add(this.line), this.cone = new B(Kh, new T({ + color: r + })), this.cone.matrixAutoUpdate = 0, this.add(this.cone), this.setDirection(t), this.setLength(n, o, a) + } + + function To(t) { + var e, n, i, r; + e = [0, 0, 0, t = t || 1, 0, 0, 0, 0, 0, 0, t, 0, 0, 0, 0, 0, 0, t], n = [1, 0, 0, 1, .6, 0, 0, 1, 0, .6, 1, 0, 0, 0, 1, 0, .6, 1], (i = new k).addAttribute("position", new I(e, 3)), i.addAttribute("color", new I(n, 3)), r = new Qe({ + vertexColors: Ho + }), tn.call(this, i, r) + } + + function Ao(t) { + nr.call(this, t), this.type = "catmullrom" + } + + function Lo(t, e) { + return t(e = { + exports: {} + }, e.exports), e.exports + } + + function Co() { + var t = ap("#subdivideSLT").val() > 0 ? ap("#subdivideSLT").val() : void 0, + e = CK.character.data.mirroredPose, + n = Do(CK.character, t, e), + i = (new tp).parse(n), + r = Oo(), + o = new Blob([i], { + type: "application/sla;charset=utf-8" + }); + op(o, r + (t ? "-smooth" : "") + ".stl") + } + + function Po() { + var t = ap("#subdivideSLT").val() > 0 ? ap("#subdivideSLT").val() : void 0, + e = CK.character.data.mirroredPose, + n = Do(CK.character, t, e), + i = (new ep).parse(n), + r = Oo(), + o = new Blob([i], { + type: "text/plain;charset=utf-8" + }); + op(o, r + (t ? "-smooth" : "") + ".obj") + } + + function Eo() { + var t = Oo(), + e = new Blob([JSON.stringify(CK.data.getJson())], { + type: "text/plain;charset=utf-8" + }); + op(e, t + ".json") + } + + function No(t) { + var e = t.target.files[0], + n = new FileReader; + n.onload = function(t) { + t.preventDefault(), CK.change(JSON.parse(t.target.result)) + }, null != e && n.readAsText(e) + } + + function Oo() { + var t = CK.character.data.meta.character_name; + return "" === t ? "Hero" : t + } + + function Do(t, e, n) { + var i = new T, + r = new Ie; + return t.traverseVisible(function(t) { + var o, a; + t.isMesh && (o = (new sp).parse(t), 1 == n && (o = function(t) { + const e = [0, 0, 0]; + t.index && t.copy(t.toNonIndexed()); + for (let n = 0; n < t.attributes.position.array.length / 9; n++) e[0] = t.attributes.position.array[9 * n], e[1] = t.attributes.position.array[9 * n + 1], e[2] = t.attributes.position.array[9 * n + 2], t.attributes.position.array[9 * n] = t.attributes.position.array[9 * n + 6], t.attributes.position.array[9 * n + 1] = t.attributes.position.array[9 * n + 7], t.attributes.position.array[9 * n + 2] = t.attributes.position.array[9 * n + 8], t.attributes.position.array[9 * n + 6] = e[0], t.attributes.position.array[9 * n + 7] = e[1], t.attributes.position.array[9 * n + 8] = e[2]; + return t + }(o)), e && "baseRim" != t.name && "base" != t.name && (o = function(t) { + return new np(e).modify(t) + }(o)), a = new B(o, i), r.add(a)) + }), r + } + var Io, zo, Ro, Fo, ko, Bo, Uo, jo, Vo, Go, Wo, Ho, qo, Xo, Yo, Zo, Jo, $o, Qo, Ko, ta, ea, na, ia, ra, oa, aa, sa, ca, la, ua, ha, pa, da, fa, ma, ga, va, ya, xa, ba, _a, wa, Ma, Sa, Ta, Aa, La, Ca, Pa, Ea, Na, Oa, Da, Ia, za, Ra, Fa, ka, Ba, Ua, ja, Va, Ga, Wa, Ha, qa, Xa, Ya, Za, Ja, $a, Qa, Ka, ts, es, ns, is, rs, os, as, ss, cs, ls, us, hs, ps, ds, fs, ms, gs, vs, ys, xs, bs, _s, ws, Ms, Ss, Ts, As, Ls, Cs, Ps, Es, Ns, Os, Ds, Is, zs, Rs, Fs, ks, Bs, Us, js, Vs, Gs, Ws, Hs, qs, Xs, Ys, Zs, Js, $s, Qs, Ks, tc, ec, nc, ic, rc, oc, ac, sc, cc, lc, uc, hc, pc, dc, fc, mc, gc, vc, yc, xc, bc, _c, wc, Mc, Sc, Tc, Ac, Lc, Cc, Pc, Ec, Nc, Oc, Dc, Ic, zc, Rc, Fc, kc, Bc, Uc, jc, Vc, Gc, Wc, Hc, qc, Xc, Yc, Zc, Jc, $c, Qc, Kc, tl, el, nl, il, rl, ol, al, sl, cl, ll, ul, hl, pl, dl, fl, ml, gl, vl, yl, xl, bl, _l, wl, Ml, Sl, Tl, Al, Ll, Cl, Pl, El, Nl, Ol, Dl, Il, zl, Rl, Fl, kl, Bl, Ul, jl, Vl, Gl, Wl, Hl, ql, Xl, Yl, Zl, Jl, $l, Ql, Kl, tu, eu, nu, iu, ru, ou, au, su, cu, lu, uu, hu, pu, du, fu, mu, gu, vu, yu, xu, bu, _u, wu, Mu, Su, Tu, Au, Lu, Cu, Pu, Eu, Nu, Ou, Du, Iu, zu, Ru, Fu, ku, Bu, Uu, ju, Vu, Gu, Wu, Hu, qu, Xu, Yu, Zu, Ju, $u, Qu, Ku, th, eh, nh, ih, rh, oh, ah, sh, ch, lh, uh, hh, ph, dh, fh, mh, gh, vh, yh, xh, bh, _h, wh, Mh, Sh, Th, Ah, Lh, Ch, Ph, Eh, Nh, Oh, Dh, Ih, zh, Rh, Fh, kh, Bh, Uh, jh, Vh, Gh, Wh, Hh, qh, Xh, Yh, Zh, Jh, $h, Qh, Kh, tp, ep, np, ip, rp, op, ap, sp, cp, lp; + void 0 === Number.EPSILON && (Number.EPSILON = Math.pow(2, -52)), void 0 === Number.isInteger && (Number.isInteger = function(t) { + return "number" == typeof t && isFinite(t) && Math.floor(t) === t + }), void 0 === Math.sign && (Math.sign = function(t) { + return t < 0 ? -1 : t > 0 ? 1 : +t + }), "name" in Function.prototype == 0 && Object.defineProperty(Function.prototype, "name", { + get: function() { + return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1] + } + }), void 0 === Object.assign && (Object.assign = function(t) { + var e, n, i, r; + if (null == t) throw new TypeError("Cannot convert undefined or null to object"); + for (e = Object(t), n = 1; n < arguments.length; n++) + if (null != (i = arguments[n])) + for (r in i) Object.prototype.hasOwnProperty.call(i, r) && (e[r] = i[r]); + return e + }), Io = 0, zo = 1, Ro = 2, Fo = 1, ko = 2, Bo = 3, Uo = 0, jo = 1, Vo = 2, Go = 0, Wo = 1, Ho = 2, qo = 0, Xo = 1, Yo = 2, Zo = 3, Jo = 4, $o = 5, Qo = 100, Ko = 101, ta = 102, ea = 103, na = 104, ia = 200, ra = 201, oa = 202, aa = 203, sa = 204, ca = 205, la = 206, ua = 207, ha = 208, pa = 209, da = 210, fa = 0, ma = 1, ga = 2, va = 3, ya = 4, xa = 5, ba = 6, _a = 7, wa = 0, Ma = 1, Sa = 2, Ta = 0, Aa = 1, La = 2, Ca = 3, Pa = 4, Ea = 5, Na = 301, Oa = 302, Da = 303, Ia = 304, za = 305, Ra = 306, Fa = 307, ka = 1e3, Ba = 1001, Ua = 1002, ja = 1003, Va = 1004, Ga = 1005, Wa = 1006, Ha = 1007, qa = 1008, Xa = 1009, Ya = 1010, Za = 1011, Ja = 1012, $a = 1013, Qa = 1014, Ka = 1015, ts = 1016, es = 1017, ns = 1018, is = 1019, rs = 1020, os = 1021, as = 1022, ss = 1023, cs = 1024, ls = 1025, us = 1026, hs = 1027, ps = 1028, ds = 33776, fs = 33777, ms = 33778, gs = 33779, vs = 35840, ys = 35841, xs = 35842, bs = 35843, _s = 36196, ws = 37808, Ms = 37809, Ss = 37810, Ts = 37811, As = 37812, Ls = 37813, Cs = 37814, Ps = 37815, Es = 37816, Ns = 37817, Os = 37818, Ds = 37819, Is = 37820, zs = 37821, Rs = 2201, Fs = 2400, ks = 0, Bs = 1, Us = 2, js = 3e3, Vs = 3001, Gs = 3007, Ws = 3002, Hs = 3003, qs = 3004, Xs = 3005, Ys = 3006, Zs = 3200, Js = 3201, $s = 0, Qs = 1, Ks = 7680, tc = 519, Object.assign(t.prototype, { + addEventListener: function(t, e) { + void 0 === this._listeners && (this._listeners = {}); + var n = this._listeners; + void 0 === n[t] && (n[t] = []), -1 === n[t].indexOf(e) && n[t].push(e) + }, + hasEventListener: function(t, e) { + if (void 0 === this._listeners) return 0; + var n = this._listeners; + return void 0 !== n[t] && -1 !== n[t].indexOf(e) + }, + removeEventListener: function(t, e) { + var n, i; + void 0 !== this._listeners && void 0 !== (n = this._listeners[t]) && -1 !== (i = n.indexOf(e)) && n.splice(i, 1) + }, + dispatchEvent: function(t) { + var e, n, i, r; + if (void 0 !== this._listeners && void 0 !== (e = this._listeners[t.type])) + for (t.target = this, i = 0, r = (n = e.slice(0)).length; i < r; i++) n[i].call(this, t) + } + }), ec = []; + for (nc = 0; nc < 256; nc++) ec[nc] = (nc < 16 ? "0" : "") + nc.toString(16); + ic = { + DEG2RAD: Math.PI / 180, + RAD2DEG: 180 / Math.PI, + generateUUID: function() { + var t = 4294967295 * Math.random() | 0, + e = 4294967295 * Math.random() | 0, + n = 4294967295 * Math.random() | 0, + i = 4294967295 * Math.random() | 0; + return (ec[255 & t] + ec[t >> 8 & 255] + ec[t >> 16 & 255] + ec[t >> 24 & 255] + "-" + ec[255 & e] + ec[e >> 8 & 255] + "-" + ec[e >> 16 & 15 | 64] + ec[e >> 24 & 255] + "-" + ec[63 & n | 128] + ec[n >> 8 & 255] + "-" + ec[n >> 16 & 255] + ec[n >> 24 & 255] + ec[255 & i] + ec[i >> 8 & 255] + ec[i >> 16 & 255] + ec[i >> 24 & 255]).toUpperCase() + }, + clamp: function(t, e, n) { + return Math.max(e, Math.min(n, t)) + }, + euclideanModulo: function(t, e) { + return (t % e + e) % e + }, + mapLinear: function(t, e, n, i, r) { + return i + (t - e) * (r - i) / (n - e) + }, + lerp: function(t, e, n) { + return (1 - n) * t + n * e + }, + smoothstep: function(t, e, n) { + return t <= e ? 0 : t >= n ? 1 : (t = (t - e) / (n - e)) * t * (3 - 2 * t) + }, + smootherstep: function(t, e, n) { + return t <= e ? 0 : t >= n ? 1 : (t = (t - e) / (n - e)) * t * t * (t * (6 * t - 15) + 10) + }, + randInt: function(t, e) { + return t + Math.floor(Math.random() * (e - t + 1)) + }, + randFloat: function(t, e) { + return t + Math.random() * (e - t) + }, + randFloatSpread: function(t) { + return t * (.5 - Math.random()) + }, + degToRad: function(t) { + return t * ic.DEG2RAD + }, + radToDeg: function(t) { + return t * ic.RAD2DEG + }, + isPowerOfTwo: function(t) { + return 0 == (t & t - 1) && 0 !== t + }, + ceilPowerOfTwo: function(t) { + return Math.pow(2, Math.ceil(Math.log(t) / Math.LN2)) + }, + floorPowerOfTwo: function(t) { + return Math.pow(2, Math.floor(Math.log(t) / Math.LN2)) + } + }, Object.defineProperties(e.prototype, { + width: { + get: function() { + return this.x + }, + set: function(t) { + this.x = t + } + }, + height: { + get: function() { + return this.y + }, + set: function(t) { + this.y = t + } + } + }), Object.assign(e.prototype, { + isVector2: 1, + set: function(t, e) { + return this.x = t, this.y = e, this + }, + setScalar: function(t) { + return this.x = t, this.y = t, this + }, + setX: function(t) { + return this.x = t, this + }, + setY: function(t) { + return this.y = t, this + }, + setComponent: function(t, e) { + switch (t) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + default: + throw Error("index is out of range: " + t) + } + return this + }, + getComponent: function(t) { + switch (t) { + case 0: + return this.x; + case 1: + return this.y; + default: + throw Error("index is out of range: " + t) + } + }, + clone: function() { + return new this.constructor(this.x, this.y) + }, + copy: function(t) { + return this.x = t.x, this.y = t.y, this + }, + add: function(t, e) { + return void 0 !== e ? this.addVectors(t, e) : (this.x += t.x, this.y += t.y, this) + }, + addScalar: function(t) { + return this.x += t, this.y += t, this + }, + addVectors: function(t, e) { + return this.x = t.x + e.x, this.y = t.y + e.y, this + }, + addScaledVector: function(t, e) { + return this.x += t.x * e, this.y += t.y * e, this + }, + sub: function(t, e) { + return void 0 !== e ? this.subVectors(t, e) : (this.x -= t.x, this.y -= t.y, this) + }, + subScalar: function(t) { + return this.x -= t, this.y -= t, this + }, + subVectors: function(t, e) { + return this.x = t.x - e.x, this.y = t.y - e.y, this + }, + multiply: function(t) { + return this.x *= t.x, this.y *= t.y, this + }, + multiplyScalar: function(t) { + return this.x *= t, this.y *= t, this + }, + divide: function(t) { + return this.x /= t.x, this.y /= t.y, this + }, + divideScalar: function(t) { + return this.multiplyScalar(1 / t) + }, + applyMatrix3: function(t) { + var e = this.x, + n = this.y, + i = t.elements; + return this.x = i[0] * e + i[3] * n + i[6], this.y = i[1] * e + i[4] * n + i[7], this + }, + min: function(t) { + return this.x = Math.min(this.x, t.x), this.y = Math.min(this.y, t.y), this + }, + max: function(t) { + return this.x = Math.max(this.x, t.x), this.y = Math.max(this.y, t.y), this + }, + clamp: function(t, e) { + return this.x = Math.max(t.x, Math.min(e.x, this.x)), this.y = Math.max(t.y, Math.min(e.y, this.y)), this + }, + clampScalar: function(t, e) { + return this.x = Math.max(t, Math.min(e, this.x)), this.y = Math.max(t, Math.min(e, this.y)), this + }, + clampLength: function(t, e) { + var n = this.length(); + return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n))) + }, + floor: function() { + return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this + }, + ceil: function() { + return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this + }, + round: function() { + return this.x = Math.round(this.x), this.y = Math.round(this.y), this + }, + roundToZero: function() { + return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this + }, + negate: function() { + return this.x = -this.x, this.y = -this.y, this + }, + dot: function(t) { + return this.x * t.x + this.y * t.y + }, + cross: function(t) { + return this.x * t.y - this.y * t.x + }, + lengthSq: function() { + return this.x * this.x + this.y * this.y + }, + length: function() { + return Math.sqrt(this.x * this.x + this.y * this.y) + }, + manhattanLength: function() { + return Math.abs(this.x) + Math.abs(this.y) + }, + normalize: function() { + return this.divideScalar(this.length() || 1) + }, + angle: function() { + var t = Math.atan2(this.y, this.x); + return t < 0 && (t += 2 * Math.PI), t + }, + distanceTo: function(t) { + return Math.sqrt(this.distanceToSquared(t)) + }, + distanceToSquared: function(t) { + var e = this.x - t.x, + n = this.y - t.y; + return e * e + n * n + }, + manhattanDistanceTo: function(t) { + return Math.abs(this.x - t.x) + Math.abs(this.y - t.y) + }, + setLength: function(t) { + return this.normalize().multiplyScalar(t) + }, + lerp: function(t, e) { + return this.x += (t.x - this.x) * e, this.y += (t.y - this.y) * e, this + }, + lerpVectors: function(t, e, n) { + return this.subVectors(e, t).multiplyScalar(n).add(t) + }, + equals: function(t) { + return t.x === this.x && t.y === this.y + }, + fromArray: function(t, e) { + return void 0 === e && (e = 0), this.x = t[e], this.y = t[e + 1], this + }, + toArray: function(t, e) { + return void 0 === t && (t = []), void 0 === e && (e = 0), t[e] = this.x, t[e + 1] = this.y, t + }, + fromBufferAttribute: function(t, e) { + return this.x = t.getX(e), this.y = t.getY(e), this + }, + rotateAround: function(t, e) { + var n = Math.cos(e), + i = Math.sin(e), + r = this.x - t.x, + o = this.y - t.y; + return this.x = r * n - o * i + t.x, this.y = r * i + o * n + t.y, this + } + }), Object.assign(n, { + slerp: function(t, e, n, i) { + return n.copy(t).slerp(e, i) + }, + slerpFlat: function(t, e, n, i, r, o, a) { + var s, c, l, u, h, p, d, f, m = n[i + 0], + g = n[i + 1], + v = n[i + 2], + y = n[i + 3], + x = r[o + 0], + b = r[o + 1], + _ = r[o + 2], + w = r[o + 3]; + y === w && m === x && g === b && v === _ || (s = 1 - a, l = (c = m * x + g * b + v * _ + y * w) >= 0 ? 1 : -1, (u = 1 - c * c) > Number.EPSILON && (s = Math.sin(s * (p = Math.atan2(h = Math.sqrt(u), c * l))) / h, a = Math.sin(a * p) / h), m = m * s + x * (d = a * l), g = g * s + b * d, v = v * s + _ * d, y = y * s + w * d, s === 1 - a && (m *= f = 1 / Math.sqrt(m * m + g * g + v * v + y * y), g *= f, v *= f, y *= f)), t[e] = m, t[e + 1] = g, t[e + 2] = v, t[e + 3] = y + } + }), Object.defineProperties(n.prototype, { + x: { + get: function() { + return this._x + }, + set: function(t) { + this._x = t, this._onChangeCallback() + } + }, + y: { + get: function() { + return this._y + }, + set: function(t) { + this._y = t, this._onChangeCallback() + } + }, + z: { + get: function() { + return this._z + }, + set: function(t) { + this._z = t, this._onChangeCallback() + } + }, + w: { + get: function() { + return this._w + }, + set: function(t) { + this._w = t, this._onChangeCallback() + } + } + }), Object.assign(n.prototype, { + isQuaternion: 1, + set: function(t, e, n, i) { + return this._x = t, this._y = e, this._z = n, this._w = i, this._onChangeCallback(), this + }, + clone: function() { + return new this.constructor(this._x, this._y, this._z, this._w) + }, + copy: function(t) { + return this._x = t.x, this._y = t.y, this._z = t.z, this._w = t.w, this._onChangeCallback(), this + }, + setFromEuler: function(t, e) { + var n, i, r, o, a, s, c, l, u, h, p, d; + if (!t || !t.isEuler) throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order."); + return n = t._x, i = t._y, r = t._z, o = t.order, s = Math.sin, c = (a = Math.cos)(n / 2), l = a(i / 2), u = a(r / 2), h = s(n / 2), p = s(i / 2), d = s(r / 2), "XYZ" === o ? (this._x = h * l * u + c * p * d, this._y = c * p * u - h * l * d, this._z = c * l * d + h * p * u, this._w = c * l * u - h * p * d) : "YXZ" === o ? (this._x = h * l * u + c * p * d, this._y = c * p * u - h * l * d, this._z = c * l * d - h * p * u, this._w = c * l * u + h * p * d) : "ZXY" === o ? (this._x = h * l * u - c * p * d, this._y = c * p * u + h * l * d, this._z = c * l * d + h * p * u, this._w = c * l * u - h * p * d) : "ZYX" === o ? (this._x = h * l * u - c * p * d, this._y = c * p * u + h * l * d, this._z = c * l * d - h * p * u, this._w = c * l * u + h * p * d) : "YZX" === o ? (this._x = h * l * u + c * p * d, this._y = c * p * u + h * l * d, this._z = c * l * d - h * p * u, this._w = c * l * u - h * p * d) : "XZY" === o && (this._x = h * l * u - c * p * d, this._y = c * p * u - h * l * d, this._z = c * l * d + h * p * u, this._w = c * l * u + h * p * d), 0 != e && this._onChangeCallback(), this + }, + setFromAxisAngle: function(t, e) { + var n = e / 2, + i = Math.sin(n); + return this._x = t.x * i, this._y = t.y * i, this._z = t.z * i, this._w = Math.cos(n), this._onChangeCallback(), this + }, + setFromRotationMatrix: function(t) { + var e, n = t.elements, + i = n[0], + r = n[4], + o = n[8], + a = n[1], + s = n[5], + c = n[9], + l = n[2], + u = n[6], + h = n[10], + p = i + s + h; + return p > 0 ? (e = .5 / Math.sqrt(p + 1), this._w = .25 / e, this._x = (u - c) * e, this._y = (o - l) * e, this._z = (a - r) * e) : i > s && i > h ? (e = 2 * Math.sqrt(1 + i - s - h), this._w = (u - c) / e, this._x = .25 * e, this._y = (r + a) / e, this._z = (o + l) / e) : s > h ? (e = 2 * Math.sqrt(1 + s - i - h), this._w = (o - l) / e, this._x = (r + a) / e, this._y = .25 * e, this._z = (c + u) / e) : (e = 2 * Math.sqrt(1 + h - i - s), this._w = (a - r) / e, this._x = (o + l) / e, this._y = (c + u) / e, this._z = .25 * e), this._onChangeCallback(), this + }, + setFromUnitVectors: function(t, e) { + var n = t.dot(e) + 1; + return n < 1e-6 ? (n = 0, Math.abs(t.x) > Math.abs(t.z) ? (this._x = -t.y, this._y = t.x, this._z = 0, this._w = n) : (this._x = 0, this._y = -t.z, this._z = t.y, this._w = n)) : (this._x = t.y * e.z - t.z * e.y, this._y = t.z * e.x - t.x * e.z, this._z = t.x * e.y - t.y * e.x, this._w = n), this.normalize() + }, + angleTo: function(t) { + return 2 * Math.acos(Math.abs(ic.clamp(this.dot(t), -1, 1))) + }, + rotateTowards: function(t, e) { + var n, i = this.angleTo(t); + return 0 === i ? this : (n = Math.min(1, e / i), this.slerp(t, n), this) + }, + inverse: function() { + return this.conjugate() + }, + conjugate: function() { + return this._x *= -1, this._y *= -1, this._z *= -1, this._onChangeCallback(), this + }, + dot: function(t) { + return this._x * t._x + this._y * t._y + this._z * t._z + this._w * t._w + }, + lengthSq: function() { + return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w + }, + length: function() { + return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w) + }, + normalize: function() { + var t = this.length(); + return 0 === t ? (this._x = 0, this._y = 0, this._z = 0, this._w = 1) : (t = 1 / t, this._x = this._x * t, this._y = this._y * t, this._z = this._z * t, this._w = this._w * t), this._onChangeCallback(), this + }, + multiply: function(t, e) { + return void 0 !== e ? this.multiplyQuaternions(t, e) : this.multiplyQuaternions(this, t) + }, + premultiply: function(t) { + return this.multiplyQuaternions(t, this) + }, + multiplyQuaternions: function(t, e) { + var n = t._x, + i = t._y, + r = t._z, + o = t._w, + a = e._x, + s = e._y, + c = e._z, + l = e._w; + return this._x = n * l + o * a + i * c - r * s, this._y = i * l + o * s + r * a - n * c, this._z = r * l + o * c + n * s - i * a, this._w = o * l - n * a - i * s - r * c, this._onChangeCallback(), this + }, + slerp: function(t, e) { + var n, i, r, o, a, s, c, l, u, h, p; + return 0 === e ? this : 1 === e ? this.copy(t) : (n = this._x, i = this._y, r = this._z, (a = (o = this._w) * t._w + n * t._x + i * t._y + r * t._z) < 0 ? (this._w = -t._w, this._x = -t._x, this._y = -t._y, this._z = -t._z, a = -a) : this.copy(t), a >= 1 ? (this._w = o, this._x = n, this._y = i, this._z = r, this) : (s = 1 - a * a) <= Number.EPSILON ? (c = 1 - e, this._w = c * o + e * this._w, this._x = c * n + e * this._x, this._y = c * i + e * this._y, this._z = c * r + e * this._z, this.normalize(), this._onChangeCallback(), this) : (h = Math.sin((1 - e) * (u = Math.atan2(l = Math.sqrt(s), a))) / l, p = Math.sin(e * u) / l, this._w = o * h + this._w * p, this._x = n * h + this._x * p, this._y = i * h + this._y * p, this._z = r * h + this._z * p, this._onChangeCallback(), this)) + }, + equals: function(t) { + return t._x === this._x && t._y === this._y && t._z === this._z && t._w === this._w + }, + fromArray: function(t, e) { + return void 0 === e && (e = 0), this._x = t[e], this._y = t[e + 1], this._z = t[e + 2], this._w = t[e + 3], this._onChangeCallback(), this + }, + toArray: function(t, e) { + return void 0 === t && (t = []), void 0 === e && (e = 0), t[e] = this._x, t[e + 1] = this._y, t[e + 2] = this._z, t[e + 3] = this._w, t + }, + _onChange: function(t) { + return this._onChangeCallback = t, this + }, + _onChangeCallback: function() {} + }), rc = new i, oc = new n, Object.assign(i.prototype, { + isVector3: 1, + set: function(t, e, n) { + return this.x = t, this.y = e, this.z = n, this + }, + setScalar: function(t) { + return this.x = t, this.y = t, this.z = t, this + }, + setX: function(t) { + return this.x = t, this + }, + setY: function(t) { + return this.y = t, this + }, + setZ: function(t) { + return this.z = t, this + }, + setComponent: function(t, e) { + switch (t) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + case 2: + this.z = e; + break; + default: + throw Error("index is out of range: " + t) + } + return this + }, + getComponent: function(t) { + switch (t) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + default: + throw Error("index is out of range: " + t) + } + }, + clone: function() { + return new this.constructor(this.x, this.y, this.z) + }, + copy: function(t) { + return this.x = t.x, this.y = t.y, this.z = t.z, this + }, + add: function(t, e) { + return void 0 !== e ? this.addVectors(t, e) : (this.x += t.x, this.y += t.y, this.z += t.z, this) + }, + addScalar: function(t) { + return this.x += t, this.y += t, this.z += t, this + }, + addVectors: function(t, e) { + return this.x = t.x + e.x, this.y = t.y + e.y, this.z = t.z + e.z, this + }, + addScaledVector: function(t, e) { + return this.x += t.x * e, this.y += t.y * e, this.z += t.z * e, this + }, + sub: function(t, e) { + return void 0 !== e ? this.subVectors(t, e) : (this.x -= t.x, this.y -= t.y, this.z -= t.z, this) + }, + subScalar: function(t) { + return this.x -= t, this.y -= t, this.z -= t, this + }, + subVectors: function(t, e) { + return this.x = t.x - e.x, this.y = t.y - e.y, this.z = t.z - e.z, this + }, + multiply: function(t, e) { + return void 0 !== e ? this.multiplyVectors(t, e) : (this.x *= t.x, this.y *= t.y, this.z *= t.z, this) + }, + multiplyScalar: function(t) { + return this.x *= t, this.y *= t, this.z *= t, this + }, + multiplyVectors: function(t, e) { + return this.x = t.x * e.x, this.y = t.y * e.y, this.z = t.z * e.z, this + }, + applyEuler: function(t) { + return !t || t.isEuler, this.applyQuaternion(oc.setFromEuler(t)) + }, + applyAxisAngle: function(t, e) { + return this.applyQuaternion(oc.setFromAxisAngle(t, e)) + }, + applyMatrix3: function(t) { + var e = this.x, + n = this.y, + i = this.z, + r = t.elements; + return this.x = r[0] * e + r[3] * n + r[6] * i, this.y = r[1] * e + r[4] * n + r[7] * i, this.z = r[2] * e + r[5] * n + r[8] * i, this + }, + applyMatrix4: function(t) { + var e = this.x, + n = this.y, + i = this.z, + r = t.elements, + o = 1 / (r[3] * e + r[7] * n + r[11] * i + r[15]); + return this.x = (r[0] * e + r[4] * n + r[8] * i + r[12]) * o, this.y = (r[1] * e + r[5] * n + r[9] * i + r[13]) * o, this.z = (r[2] * e + r[6] * n + r[10] * i + r[14]) * o, this + }, + applyQuaternion: function(t) { + var e = this.x, + n = this.y, + i = this.z, + r = t.x, + o = t.y, + a = t.z, + s = t.w, + c = s * e + o * i - a * n, + l = s * n + a * e - r * i, + u = s * i + r * n - o * e, + h = -r * e - o * n - a * i; + return this.x = c * s + h * -r + l * -a - u * -o, this.y = l * s + h * -o + u * -r - c * -a, this.z = u * s + h * -a + c * -o - l * -r, this + }, + project: function(t) { + return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix) + }, + unproject: function(t) { + return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld) + }, + transformDirection: function(t) { + var e = this.x, + n = this.y, + i = this.z, + r = t.elements; + return this.x = r[0] * e + r[4] * n + r[8] * i, this.y = r[1] * e + r[5] * n + r[9] * i, this.z = r[2] * e + r[6] * n + r[10] * i, this.normalize() + }, + divide: function(t) { + return this.x /= t.x, this.y /= t.y, this.z /= t.z, this + }, + divideScalar: function(t) { + return this.multiplyScalar(1 / t) + }, + min: function(t) { + return this.x = Math.min(this.x, t.x), this.y = Math.min(this.y, t.y), this.z = Math.min(this.z, t.z), this + }, + max: function(t) { + return this.x = Math.max(this.x, t.x), this.y = Math.max(this.y, t.y), this.z = Math.max(this.z, t.z), this + }, + clamp: function(t, e) { + return this.x = Math.max(t.x, Math.min(e.x, this.x)), this.y = Math.max(t.y, Math.min(e.y, this.y)), this.z = Math.max(t.z, Math.min(e.z, this.z)), this + }, + clampScalar: function(t, e) { + return this.x = Math.max(t, Math.min(e, this.x)), this.y = Math.max(t, Math.min(e, this.y)), this.z = Math.max(t, Math.min(e, this.z)), this + }, + clampLength: function(t, e) { + var n = this.length(); + return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n))) + }, + floor: function() { + return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this + }, + ceil: function() { + return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this + }, + round: function() { + return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this + }, + roundToZero: function() { + return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z), this + }, + negate: function() { + return this.x = -this.x, this.y = -this.y, this.z = -this.z, this + }, + dot: function(t) { + return this.x * t.x + this.y * t.y + this.z * t.z + }, + lengthSq: function() { + return this.x * this.x + this.y * this.y + this.z * this.z + }, + length: function() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z) + }, + manhattanLength: function() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + }, + normalize: function() { + return this.divideScalar(this.length() || 1) + }, + setLength: function(t) { + return this.normalize().multiplyScalar(t) + }, + lerp: function(t, e) { + return this.x += (t.x - this.x) * e, this.y += (t.y - this.y) * e, this.z += (t.z - this.z) * e, this + }, + lerpVectors: function(t, e, n) { + return this.subVectors(e, t).multiplyScalar(n).add(t) + }, + cross: function(t, e) { + return void 0 !== e ? this.crossVectors(t, e) : this.crossVectors(this, t) + }, + crossVectors: function(t, e) { + var n = t.x, + i = t.y, + r = t.z, + o = e.x, + a = e.y, + s = e.z; + return this.x = i * s - r * a, this.y = r * o - n * s, this.z = n * a - i * o, this + }, + projectOnVector: function(t) { + var e = t.dot(this) / t.lengthSq(); + return this.copy(t).multiplyScalar(e) + }, + projectOnPlane: function(t) { + return rc.copy(this).projectOnVector(t), this.sub(rc) + }, + reflect: function(t) { + return this.sub(rc.copy(t).multiplyScalar(2 * this.dot(t))) + }, + angleTo: function(t) { + var e, n = Math.sqrt(this.lengthSq() * t.lengthSq()); + return e = this.dot(t) / n, Math.acos(ic.clamp(e, -1, 1)) + }, + distanceTo: function(t) { + return Math.sqrt(this.distanceToSquared(t)) + }, + distanceToSquared: function(t) { + var e = this.x - t.x, + n = this.y - t.y, + i = this.z - t.z; + return e * e + n * n + i * i + }, + manhattanDistanceTo: function(t) { + return Math.abs(this.x - t.x) + Math.abs(this.y - t.y) + Math.abs(this.z - t.z) + }, + setFromSpherical: function(t) { + return this.setFromSphericalCoords(t.radius, t.phi, t.theta) + }, + setFromSphericalCoords: function(t, e, n) { + var i = Math.sin(e) * t; + return this.x = i * Math.sin(n), this.y = Math.cos(e) * t, this.z = i * Math.cos(n), this + }, + setFromCylindrical: function(t) { + return this.setFromCylindricalCoords(t.radius, t.theta, t.y) + }, + setFromCylindricalCoords: function(t, e, n) { + return this.x = t * Math.sin(e), this.y = n, this.z = t * Math.cos(e), this + }, + setFromMatrixPosition: function(t) { + var e = t.elements; + return this.x = e[12], this.y = e[13], this.z = e[14], this + }, + setFromMatrixScale: function(t) { + var e = this.setFromMatrixColumn(t, 0).length(), + n = this.setFromMatrixColumn(t, 1).length(), + i = this.setFromMatrixColumn(t, 2).length(); + return this.x = e, this.y = n, this.z = i, this + }, + setFromMatrixColumn: function(t, e) { + return this.fromArray(t.elements, 4 * e) + }, + equals: function(t) { + return t.x === this.x && t.y === this.y && t.z === this.z + }, + fromArray: function(t, e) { + return void 0 === e && (e = 0), this.x = t[e], this.y = t[e + 1], this.z = t[e + 2], this + }, + toArray: function(t, e) { + return void 0 === t && (t = []), void 0 === e && (e = 0), t[e] = this.x, t[e + 1] = this.y, t[e + 2] = this.z, t + }, + fromBufferAttribute: function(t, e) { + return this.x = t.getX(e), this.y = t.getY(e), this.z = t.getZ(e), this + } + }), ac = new i, Object.assign(r.prototype, { + isMatrix3: 1, + set: function(t, e, n, i, r, o, a, s, c) { + var l = this.elements; + return l[0] = t, l[1] = i, l[2] = a, l[3] = e, l[4] = r, l[5] = s, l[6] = n, l[7] = o, l[8] = c, this + }, + identity: function() { + return this.set(1, 0, 0, 0, 1, 0, 0, 0, 1), this + }, + clone: function() { + return (new this.constructor).fromArray(this.elements) + }, + copy: function(t) { + var e = this.elements, + n = t.elements; + return e[0] = n[0], e[1] = n[1], e[2] = n[2], e[3] = n[3], e[4] = n[4], e[5] = n[5], e[6] = n[6], e[7] = n[7], e[8] = n[8], this + }, + setFromMatrix4: function(t) { + var e = t.elements; + return this.set(e[0], e[4], e[8], e[1], e[5], e[9], e[2], e[6], e[10]), this + }, + applyToBufferAttribute: function(t) { + for (var e = 0, n = t.count; e < n; e++) ac.x = t.getX(e), ac.y = t.getY(e), ac.z = t.getZ(e), ac.applyMatrix3(this), t.setXYZ(e, ac.x, ac.y, ac.z); + return t + }, + multiply: function(t) { + return this.multiplyMatrices(this, t) + }, + premultiply: function(t) { + return this.multiplyMatrices(t, this) + }, + multiplyMatrices: function(t, e) { + var n = t.elements, + i = e.elements, + r = this.elements, + o = n[0], + a = n[3], + s = n[6], + c = n[1], + l = n[4], + u = n[7], + h = n[2], + p = n[5], + d = n[8], + f = i[0], + m = i[3], + g = i[6], + v = i[1], + y = i[4], + x = i[7], + b = i[2], + _ = i[5], + w = i[8]; + return r[0] = o * f + a * v + s * b, r[3] = o * m + a * y + s * _, r[6] = o * g + a * x + s * w, r[1] = c * f + l * v + u * b, r[4] = c * m + l * y + u * _, r[7] = c * g + l * x + u * w, r[2] = h * f + p * v + d * b, r[5] = h * m + p * y + d * _, r[8] = h * g + p * x + d * w, this + }, + multiplyScalar: function(t) { + var e = this.elements; + return e[0] *= t, e[3] *= t, e[6] *= t, e[1] *= t, e[4] *= t, e[7] *= t, e[2] *= t, e[5] *= t, e[8] *= t, this + }, + determinant: function() { + var t = this.elements, + e = t[0], + n = t[1], + i = t[2], + r = t[3], + o = t[4], + a = t[5], + s = t[6], + c = t[7], + l = t[8]; + return e * o * l - e * a * c - n * r * l + n * a * s + i * r * c - i * o * s + }, + getInverse: function(t, e) { + var n, i, r, o, a, s, c, l, u, h, p, d, f, m, g, v; + if (t && t.isMatrix4, n = t.elements, i = this.elements, r = n[0], o = n[1], a = n[2], s = n[3], c = n[4], l = n[5], u = n[6], h = n[7], 0 == (g = r * (d = (p = n[8]) * c - l * h) + o * (f = l * u - p * s) + a * (m = h * s - c * u))) { + if (1 == e) throw Error("THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0"); + return this.identity() + } + return v = 1 / g, i[0] = d * v, i[1] = (a * h - p * o) * v, i[2] = (l * o - a * c) * v, i[3] = f * v, i[4] = (p * r - a * u) * v, i[5] = (a * s - l * r) * v, i[6] = m * v, i[7] = (o * u - h * r) * v, i[8] = (c * r - o * s) * v, this + }, + transpose: function() { + var t, e = this.elements; + return t = e[1], e[1] = e[3], e[3] = t, t = e[2], e[2] = e[6], e[6] = t, t = e[5], e[5] = e[7], e[7] = t, this + }, + getNormalMatrix: function(t) { + return this.setFromMatrix4(t).getInverse(this).transpose() + }, + transposeIntoArray: function(t) { + var e = this.elements; + return t[0] = e[0], t[1] = e[3], t[2] = e[6], t[3] = e[1], t[4] = e[4], t[5] = e[7], t[6] = e[2], t[7] = e[5], t[8] = e[8], this + }, + setUvTransform: function(t, e, n, i, r, o, a) { + var s = Math.cos(r), + c = Math.sin(r); + this.set(n * s, n * c, -n * (s * o + c * a) + o + t, -i * c, i * s, -i * (-c * o + s * a) + a + e, 0, 0, 1) + }, + scale: function(t, e) { + var n = this.elements; + return n[0] *= t, n[3] *= t, n[6] *= t, n[1] *= e, n[4] *= e, n[7] *= e, this + }, + rotate: function(t) { + var e = Math.cos(t), + n = Math.sin(t), + i = this.elements, + r = i[0], + o = i[3], + a = i[6], + s = i[1], + c = i[4], + l = i[7]; + return i[0] = e * r + n * s, i[3] = e * o + n * c, i[6] = e * a + n * l, i[1] = -n * r + e * s, i[4] = -n * o + e * c, i[7] = -n * a + e * l, this + }, + translate: function(t, e) { + var n = this.elements; + return n[0] += t * n[2], n[3] += t * n[5], n[6] += t * n[8], n[1] += e * n[2], n[4] += e * n[5], n[7] += e * n[8], this + }, + equals: function(t) { + var e, n = this.elements, + i = t.elements; + for (e = 0; e < 9; e++) + if (n[e] !== i[e]) return 0; + return 1 + }, + fromArray: function(t, e) { + void 0 === e && (e = 0); + for (var n = 0; n < 9; n++) this.elements[n] = t[n + e]; + return this + }, + toArray: function(t, e) { + void 0 === t && (t = []), void 0 === e && (e = 0); + var n = this.elements; + return t[e] = n[0], t[e + 1] = n[1], t[e + 2] = n[2], t[e + 3] = n[3], t[e + 4] = n[4], t[e + 5] = n[5], t[e + 6] = n[6], t[e + 7] = n[7], t[e + 8] = n[8], t + } + }), cc = { + getDataURL: function(t) { + var e, n; + return "undefined" == typeof HTMLCanvasElement ? t.src : (t instanceof HTMLCanvasElement ? e = t : (void 0 === sc && (sc = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas")), sc.width = t.width, sc.height = t.height, n = sc.getContext("2d"), t instanceof ImageData ? n.putImageData(t, 0, 0) : n.drawImage(t, 0, 0, t.width, t.height), e = sc), e.width > 2048 || e.height > 2048 ? e.toDataURL("image/jpeg", .6) : e.toDataURL("image/png")) + } + }, lc = 0, o.DEFAULT_IMAGE = void 0, o.DEFAULT_MAPPING = 300, o.prototype = Object.assign(Object.create(t.prototype), { + constructor: o, + isTexture: 1, + updateMatrix: function() { + this.matrix.setUvTransform(this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y) + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + return this.name = t.name, this.image = t.image, this.mipmaps = t.mipmaps.slice(0), this.mapping = t.mapping, this.wrapS = t.wrapS, this.wrapT = t.wrapT, this.magFilter = t.magFilter, this.minFilter = t.minFilter, this.anisotropy = t.anisotropy, this.format = t.format, this.type = t.type, this.offset.copy(t.offset), this.repeat.copy(t.repeat), this.center.copy(t.center), this.rotation = t.rotation, this.matrixAutoUpdate = t.matrixAutoUpdate, this.matrix.copy(t.matrix), this.generateMipmaps = t.generateMipmaps, this.premultiplyAlpha = t.premultiplyAlpha, this.flipY = t.flipY, this.unpackAlignment = t.unpackAlignment, this.encoding = t.encoding, this + }, + toJSON: function(t) { + var e, n, i, r, o, a = void 0 === t || "string" == typeof t; + if (!a && void 0 !== t.textures[this.uuid]) return t.textures[this.uuid]; + if (e = { + metadata: { + version: 4.5, + type: "Texture", + generator: "Texture.toJSON" + }, + uuid: this.uuid, + name: this.name, + mapping: this.mapping, + repeat: [this.repeat.x, this.repeat.y], + offset: [this.offset.x, this.offset.y], + center: [this.center.x, this.center.y], + rotation: this.rotation, + wrap: [this.wrapS, this.wrapT], + format: this.format, + type: this.type, + encoding: this.encoding, + minFilter: this.minFilter, + magFilter: this.magFilter, + anisotropy: this.anisotropy, + flipY: this.flipY, + premultiplyAlpha: this.premultiplyAlpha, + unpackAlignment: this.unpackAlignment + }, void 0 !== this.image) { + if (void 0 === (n = this.image).uuid && (n.uuid = ic.generateUUID()), !a && void 0 === t.images[n.uuid]) { + if (Array.isArray(n)) + for (i = [], r = 0, o = n.length; r < o; r++) i.push(cc.getDataURL(n[r])); + else i = cc.getDataURL(n); + t.images[n.uuid] = { + uuid: n.uuid, + url: i + } + } + e.image = n.uuid + } + return a || (t.textures[this.uuid] = e), e + }, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + }, + transformUv: function(t) { + if (300 !== this.mapping) return t; + if (t.applyMatrix3(this.matrix), t.x < 0 || t.x > 1) switch (this.wrapS) { + case ka: + t.x = t.x - Math.floor(t.x); + break; + case Ba: + t.x = t.x < 0 ? 0 : 1; + break; + case Ua: + 1 === Math.abs(Math.floor(t.x) % 2) ? t.x = Math.ceil(t.x) - t.x : t.x = t.x - Math.floor(t.x) + } + if (t.y < 0 || t.y > 1) switch (this.wrapT) { + case ka: + t.y = t.y - Math.floor(t.y); + break; + case Ba: + t.y = t.y < 0 ? 0 : 1; + break; + case Ua: + 1 === Math.abs(Math.floor(t.y) % 2) ? t.y = Math.ceil(t.y) - t.y : t.y = t.y - Math.floor(t.y) + } + return this.flipY && (t.y = 1 - t.y), t + } + }), Object.defineProperty(o.prototype, "needsUpdate", { + set: function(t) { + 1 == t && this.version++ + } + }), Object.defineProperties(a.prototype, { + width: { + get: function() { + return this.z + }, + set: function(t) { + this.z = t + } + }, + height: { + get: function() { + return this.w + }, + set: function(t) { + this.w = t + } + } + }), Object.assign(a.prototype, { + isVector4: 1, + set: function(t, e, n, i) { + return this.x = t, this.y = e, this.z = n, this.w = i, this + }, + setScalar: function(t) { + return this.x = t, this.y = t, this.z = t, this.w = t, this + }, + setX: function(t) { + return this.x = t, this + }, + setY: function(t) { + return this.y = t, this + }, + setZ: function(t) { + return this.z = t, this + }, + setW: function(t) { + return this.w = t, this + }, + setComponent: function(t, e) { + switch (t) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + case 2: + this.z = e; + break; + case 3: + this.w = e; + break; + default: + throw Error("index is out of range: " + t) + } + return this + }, + getComponent: function(t) { + switch (t) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + case 3: + return this.w; + default: + throw Error("index is out of range: " + t) + } + }, + clone: function() { + return new this.constructor(this.x, this.y, this.z, this.w) + }, + copy: function(t) { + return this.x = t.x, this.y = t.y, this.z = t.z, this.w = void 0 !== t.w ? t.w : 1, this + }, + add: function(t, e) { + return void 0 !== e ? this.addVectors(t, e) : (this.x += t.x, this.y += t.y, this.z += t.z, this.w += t.w, this) + }, + addScalar: function(t) { + return this.x += t, this.y += t, this.z += t, this.w += t, this + }, + addVectors: function(t, e) { + return this.x = t.x + e.x, this.y = t.y + e.y, this.z = t.z + e.z, this.w = t.w + e.w, this + }, + addScaledVector: function(t, e) { + return this.x += t.x * e, this.y += t.y * e, this.z += t.z * e, this.w += t.w * e, this + }, + sub: function(t, e) { + return void 0 !== e ? this.subVectors(t, e) : (this.x -= t.x, this.y -= t.y, this.z -= t.z, this.w -= t.w, this) + }, + subScalar: function(t) { + return this.x -= t, this.y -= t, this.z -= t, this.w -= t, this + }, + subVectors: function(t, e) { + return this.x = t.x - e.x, this.y = t.y - e.y, this.z = t.z - e.z, this.w = t.w - e.w, this + }, + multiplyScalar: function(t) { + return this.x *= t, this.y *= t, this.z *= t, this.w *= t, this + }, + applyMatrix4: function(t) { + var e = this.x, + n = this.y, + i = this.z, + r = this.w, + o = t.elements; + return this.x = o[0] * e + o[4] * n + o[8] * i + o[12] * r, this.y = o[1] * e + o[5] * n + o[9] * i + o[13] * r, this.z = o[2] * e + o[6] * n + o[10] * i + o[14] * r, this.w = o[3] * e + o[7] * n + o[11] * i + o[15] * r, this + }, + divideScalar: function(t) { + return this.multiplyScalar(1 / t) + }, + setAxisAngleFromQuaternion: function(t) { + this.w = 2 * Math.acos(t.w); + var e = Math.sqrt(1 - t.w * t.w); + return e < 1e-4 ? (this.x = 1, this.y = 0, this.z = 0) : (this.x = t.x / e, this.y = t.y / e, this.z = t.z / e), this + }, + setAxisAngleFromRotationMatrix: function(t) { + var e, n, i, r, o, a, s, c, l, u, h = t.elements, + p = h[0], + d = h[4], + f = h[8], + m = h[1], + g = h[5], + v = h[9], + y = h[2], + x = h[6], + b = h[10]; + return Math.abs(d - m) < .01 && Math.abs(f - y) < .01 && Math.abs(v - x) < .01 ? Math.abs(d + m) < .1 && Math.abs(f + y) < .1 && Math.abs(v + x) < .1 && Math.abs(p + g + b - 3) < .1 ? (this.set(1, 0, 0, 0), this) : (a = (b + 1) / 2, s = (d + m) / 4, c = (f + y) / 4, l = (v + x) / 4, (r = (p + 1) / 2) > (o = (g + 1) / 2) && r > a ? r < .01 ? (e = 0, n = .707106781, i = .707106781) : (n = s / (e = Math.sqrt(r)), i = c / e) : o > a ? o < .01 ? (e = .707106781, n = 0, i = .707106781) : (e = s / (n = Math.sqrt(o)), i = l / n) : a < .01 ? (e = .707106781, n = .707106781, i = 0) : (e = c / (i = Math.sqrt(a)), n = l / i), this.set(e, n, i, 3.141592653589793), this) : (Math.abs(u = Math.sqrt((x - v) * (x - v) + (f - y) * (f - y) + (m - d) * (m - d))) < .001 && (u = 1), this.x = (x - v) / u, this.y = (f - y) / u, this.z = (m - d) / u, this.w = Math.acos((p + g + b - 1) / 2), this) + }, + min: function(t) { + return this.x = Math.min(this.x, t.x), this.y = Math.min(this.y, t.y), this.z = Math.min(this.z, t.z), this.w = Math.min(this.w, t.w), this + }, + max: function(t) { + return this.x = Math.max(this.x, t.x), this.y = Math.max(this.y, t.y), this.z = Math.max(this.z, t.z), this.w = Math.max(this.w, t.w), this + }, + clamp: function(t, e) { + return this.x = Math.max(t.x, Math.min(e.x, this.x)), this.y = Math.max(t.y, Math.min(e.y, this.y)), this.z = Math.max(t.z, Math.min(e.z, this.z)), this.w = Math.max(t.w, Math.min(e.w, this.w)), this + }, + clampScalar: function(t, e) { + return this.x = Math.max(t, Math.min(e, this.x)), this.y = Math.max(t, Math.min(e, this.y)), this.z = Math.max(t, Math.min(e, this.z)), this.w = Math.max(t, Math.min(e, this.w)), this + }, + clampLength: function(t, e) { + var n = this.length(); + return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n))) + }, + floor: function() { + return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this.w = Math.floor(this.w), this + }, + ceil: function() { + return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this.w = Math.ceil(this.w), this + }, + round: function() { + return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this.w = Math.round(this.w), this + }, + roundToZero: function() { + return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z), this.w = this.w < 0 ? Math.ceil(this.w) : Math.floor(this.w), this + }, + negate: function() { + return this.x = -this.x, this.y = -this.y, this.z = -this.z, this.w = -this.w, this + }, + dot: function(t) { + return this.x * t.x + this.y * t.y + this.z * t.z + this.w * t.w + }, + lengthSq: function() { + return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w + }, + length: function() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w) + }, + manhattanLength: function() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w) + }, + normalize: function() { + return this.divideScalar(this.length() || 1) + }, + setLength: function(t) { + return this.normalize().multiplyScalar(t) + }, + lerp: function(t, e) { + return this.x += (t.x - this.x) * e, this.y += (t.y - this.y) * e, this.z += (t.z - this.z) * e, this.w += (t.w - this.w) * e, this + }, + lerpVectors: function(t, e, n) { + return this.subVectors(e, t).multiplyScalar(n).add(t) + }, + equals: function(t) { + return t.x === this.x && t.y === this.y && t.z === this.z && t.w === this.w + }, + fromArray: function(t, e) { + return void 0 === e && (e = 0), this.x = t[e], this.y = t[e + 1], this.z = t[e + 2], this.w = t[e + 3], this + }, + toArray: function(t, e) { + return void 0 === t && (t = []), void 0 === e && (e = 0), t[e] = this.x, t[e + 1] = this.y, t[e + 2] = this.z, t[e + 3] = this.w, t + }, + fromBufferAttribute: function(t, e) { + return this.x = t.getX(e), this.y = t.getY(e), this.z = t.getZ(e), this.w = t.getW(e), this + } + }), s.prototype = Object.assign(Object.create(t.prototype), { + constructor: s, + isWebGLRenderTarget: 1, + setSize: function(t, e) { + this.width === t && this.height === e || (this.width = t, this.height = e, this.texture.image.width = t, this.texture.image.height = e, this.dispose()), this.viewport.set(0, 0, t, e), this.scissor.set(0, 0, t, e) + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + return this.width = t.width, this.height = t.height, this.viewport.copy(t.viewport), this.texture = t.texture.clone(), this.depthBuffer = t.depthBuffer, this.stencilBuffer = t.stencilBuffer, this.depthTexture = t.depthTexture, this + }, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + } + }), c.prototype = Object.assign(Object.create(s.prototype), { + constructor: c, + isWebGLMultisampleRenderTarget: 1, + copy: function(t) { + return s.prototype.copy.call(this, t), this.samples = t.samples, this + } + }), uc = new i, hc = new l, pc = new i(0, 0, 0), dc = new i(1, 1, 1), fc = new i, mc = new i, gc = new i, Object.assign(l.prototype, { + isMatrix4: 1, + set: function(t, e, n, i, r, o, a, s, c, l, u, h, p, d, f, m) { + var g = this.elements; + return g[0] = t, g[4] = e, g[8] = n, g[12] = i, g[1] = r, g[5] = o, g[9] = a, g[13] = s, g[2] = c, g[6] = l, g[10] = u, g[14] = h, g[3] = p, g[7] = d, g[11] = f, g[15] = m, this + }, + identity: function() { + return this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this + }, + clone: function() { + return (new l).fromArray(this.elements) + }, + copy: function(t) { + var e = this.elements, + n = t.elements; + return e[0] = n[0], e[1] = n[1], e[2] = n[2], e[3] = n[3], e[4] = n[4], e[5] = n[5], e[6] = n[6], e[7] = n[7], e[8] = n[8], e[9] = n[9], e[10] = n[10], e[11] = n[11], e[12] = n[12], e[13] = n[13], e[14] = n[14], e[15] = n[15], this + }, + copyPosition: function(t) { + var e = this.elements, + n = t.elements; + return e[12] = n[12], e[13] = n[13], e[14] = n[14], this + }, + extractBasis: function(t, e, n) { + return t.setFromMatrixColumn(this, 0), e.setFromMatrixColumn(this, 1), n.setFromMatrixColumn(this, 2), this + }, + makeBasis: function(t, e, n) { + return this.set(t.x, e.x, n.x, 0, t.y, e.y, n.y, 0, t.z, e.z, n.z, 0, 0, 0, 0, 1), this + }, + extractRotation: function(t) { + var e = this.elements, + n = t.elements, + i = 1 / uc.setFromMatrixColumn(t, 0).length(), + r = 1 / uc.setFromMatrixColumn(t, 1).length(), + o = 1 / uc.setFromMatrixColumn(t, 2).length(); + return e[0] = n[0] * i, e[1] = n[1] * i, e[2] = n[2] * i, e[3] = 0, e[4] = n[4] * r, e[5] = n[5] * r, e[6] = n[6] * r, e[7] = 0, e[8] = n[8] * o, e[9] = n[9] * o, e[10] = n[10] * o, e[11] = 0, e[12] = 0, e[13] = 0, e[14] = 0, e[15] = 1, this + }, + makeRotationFromEuler: function(t) { + var e, n, i, r, o, a, s, c, l, u, h, p, d, f, m, g, v, y, x, b, _, w; + return !t || t.isEuler, e = this.elements, n = t.x, i = t.y, r = t.z, o = Math.cos(n), a = Math.sin(n), s = Math.cos(i), c = Math.sin(i), l = Math.cos(r), u = Math.sin(r), "XYZ" === t.order ? (h = o * l, p = o * u, d = a * l, f = a * u, e[0] = s * l, e[4] = -s * u, e[8] = c, e[1] = p + d * c, e[5] = h - f * c, e[9] = -a * s, e[2] = f - h * c, e[6] = d + p * c, e[10] = o * s) : "YXZ" === t.order ? (m = s * l, g = s * u, v = c * l, y = c * u, e[0] = m + y * a, e[4] = v * a - g, e[8] = o * c, e[1] = o * u, e[5] = o * l, e[9] = -a, e[2] = g * a - v, e[6] = y + m * a, e[10] = o * s) : "ZXY" === t.order ? (m = s * l, g = s * u, v = c * l, y = c * u, e[0] = m - y * a, e[4] = -o * u, e[8] = v + g * a, e[1] = g + v * a, e[5] = o * l, e[9] = y - m * a, e[2] = -o * c, e[6] = a, e[10] = o * s) : "ZYX" === t.order ? (h = o * l, p = o * u, d = a * l, f = a * u, e[0] = s * l, e[4] = d * c - p, e[8] = h * c + f, e[1] = s * u, e[5] = f * c + h, e[9] = p * c - d, e[2] = -c, e[6] = a * s, e[10] = o * s) : "YZX" === t.order ? (x = o * s, b = o * c, _ = a * s, w = a * c, e[0] = s * l, e[4] = w - x * u, e[8] = _ * u + b, e[1] = u, e[5] = o * l, e[9] = -a * l, e[2] = -c * l, e[6] = b * u + _, e[10] = x - w * u) : "XZY" === t.order && (x = o * s, b = o * c, _ = a * s, w = a * c, e[0] = s * l, e[4] = -u, e[8] = c * l, e[1] = x * u + w, e[5] = o * l, e[9] = b * u - _, e[2] = _ * u - b, e[6] = a * l, e[10] = w * u + x), e[3] = 0, e[7] = 0, e[11] = 0, e[12] = 0, e[13] = 0, e[14] = 0, e[15] = 1, this + }, + makeRotationFromQuaternion: function(t) { + return this.compose(pc, t, dc) + }, + lookAt: function(t, e, n) { + var i = this.elements; + return gc.subVectors(t, e), 0 === gc.lengthSq() && (gc.z = 1), gc.normalize(), fc.crossVectors(n, gc), 0 === fc.lengthSq() && (1 === Math.abs(n.z) ? gc.x += 1e-4 : gc.z += 1e-4, gc.normalize(), fc.crossVectors(n, gc)), fc.normalize(), mc.crossVectors(gc, fc), i[0] = fc.x, i[4] = mc.x, i[8] = gc.x, i[1] = fc.y, i[5] = mc.y, i[9] = gc.y, i[2] = fc.z, i[6] = mc.z, i[10] = gc.z, this + }, + multiply: function(t, e) { + return void 0 !== e ? this.multiplyMatrices(t, e) : this.multiplyMatrices(this, t) + }, + premultiply: function(t) { + return this.multiplyMatrices(t, this) + }, + multiplyMatrices: function(t, e) { + var n = t.elements, + i = e.elements, + r = this.elements, + o = n[0], + a = n[4], + s = n[8], + c = n[12], + l = n[1], + u = n[5], + h = n[9], + p = n[13], + d = n[2], + f = n[6], + m = n[10], + g = n[14], + v = n[3], + y = n[7], + x = n[11], + b = n[15], + _ = i[0], + w = i[4], + M = i[8], + S = i[12], + T = i[1], + A = i[5], + L = i[9], + C = i[13], + P = i[2], + E = i[6], + N = i[10], + O = i[14], + D = i[3], + I = i[7], + z = i[11], + R = i[15]; + return r[0] = o * _ + a * T + s * P + c * D, r[4] = o * w + a * A + s * E + c * I, r[8] = o * M + a * L + s * N + c * z, r[12] = o * S + a * C + s * O + c * R, r[1] = l * _ + u * T + h * P + p * D, r[5] = l * w + u * A + h * E + p * I, r[9] = l * M + u * L + h * N + p * z, r[13] = l * S + u * C + h * O + p * R, r[2] = d * _ + f * T + m * P + g * D, r[6] = d * w + f * A + m * E + g * I, r[10] = d * M + f * L + m * N + g * z, r[14] = d * S + f * C + m * O + g * R, r[3] = v * _ + y * T + x * P + b * D, r[7] = v * w + y * A + x * E + b * I, r[11] = v * M + y * L + x * N + b * z, r[15] = v * S + y * C + x * O + b * R, this + }, + multiplyScalar: function(t) { + var e = this.elements; + return e[0] *= t, e[4] *= t, e[8] *= t, e[12] *= t, e[1] *= t, e[5] *= t, e[9] *= t, e[13] *= t, e[2] *= t, e[6] *= t, e[10] *= t, e[14] *= t, e[3] *= t, e[7] *= t, e[11] *= t, e[15] *= t, this + }, + applyToBufferAttribute: function(t) { + for (var e = 0, n = t.count; e < n; e++) uc.x = t.getX(e), uc.y = t.getY(e), uc.z = t.getZ(e), uc.applyMatrix4(this), t.setXYZ(e, uc.x, uc.y, uc.z); + return t + }, + determinant: function() { + var t = this.elements, + e = t[0], + n = t[4], + i = t[8], + r = t[12], + o = t[1], + a = t[5], + s = t[9], + c = t[13], + l = t[2], + u = t[6], + h = t[10], + p = t[14]; + return t[3] * (+r * s * u - i * c * u - r * a * h + n * c * h + i * a * p - n * s * p) + t[7] * (+e * s * p - e * c * h + r * o * h - i * o * p + i * c * l - r * s * l) + t[11] * (+e * c * u - e * a * p - r * o * u + n * o * p + r * a * l - n * c * l) + t[15] * (-i * a * l - e * s * u + e * a * h + i * o * u - n * o * h + n * s * l) + }, + transpose: function() { + var t = this.elements, + e = t[1]; + return t[1] = t[4], t[4] = e, e = t[2], t[2] = t[8], t[8] = e, e = t[6], t[6] = t[9], t[9] = e, e = t[3], t[3] = t[12], t[12] = e, e = t[7], t[7] = t[13], t[13] = e, e = t[11], t[11] = t[14], t[14] = e, this + }, + setPosition: function(t, e, n) { + var i = this.elements; + return t.isVector3 ? (i[12] = t.x, i[13] = t.y, i[14] = t.z) : (i[12] = t, i[13] = e, i[14] = n), this + }, + getInverse: function(t, e) { + var n, i = this.elements, + r = t.elements, + o = r[0], + a = r[1], + s = r[2], + c = r[3], + l = r[4], + u = r[5], + h = r[6], + p = r[7], + d = r[8], + f = r[9], + m = r[10], + g = r[11], + v = r[12], + y = r[13], + x = r[14], + b = r[15], + _ = f * x * p - y * m * p + y * h * g - u * x * g - f * h * b + u * m * b, + w = v * m * p - d * x * p - v * h * g + l * x * g + d * h * b - l * m * b, + M = d * y * p - v * f * p + v * u * g - l * y * g - d * u * b + l * f * b, + S = v * f * h - d * y * h - v * u * m + l * y * m + d * u * x - l * f * x, + T = o * _ + a * w + s * M + c * S; + if (0 === T) { + if (1 == e) throw Error("THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0"); + return this.identity() + } + return n = 1 / T, i[0] = _ * n, i[1] = (y * m * c - f * x * c - y * s * g + a * x * g + f * s * b - a * m * b) * n, i[2] = (u * x * c - y * h * c + y * s * p - a * x * p - u * s * b + a * h * b) * n, i[3] = (f * h * c - u * m * c - f * s * p + a * m * p + u * s * g - a * h * g) * n, i[4] = w * n, i[5] = (d * x * c - v * m * c + v * s * g - o * x * g - d * s * b + o * m * b) * n, i[6] = (v * h * c - l * x * c - v * s * p + o * x * p + l * s * b - o * h * b) * n, i[7] = (l * m * c - d * h * c + d * s * p - o * m * p - l * s * g + o * h * g) * n, i[8] = M * n, i[9] = (v * f * c - d * y * c - v * a * g + o * y * g + d * a * b - o * f * b) * n, i[10] = (l * y * c - v * u * c + v * a * p - o * y * p - l * a * b + o * u * b) * n, i[11] = (d * u * c - l * f * c - d * a * p + o * f * p + l * a * g - o * u * g) * n, i[12] = S * n, i[13] = (d * y * s - v * f * s + v * a * m - o * y * m - d * a * x + o * f * x) * n, i[14] = (v * u * s - l * y * s - v * a * h + o * y * h + l * a * x - o * u * x) * n, i[15] = (l * f * s - d * u * s + d * a * h - o * f * h - l * a * m + o * u * m) * n, this + }, + scale: function(t) { + var e = this.elements, + n = t.x, + i = t.y, + r = t.z; + return e[0] *= n, e[4] *= i, e[8] *= r, e[1] *= n, e[5] *= i, e[9] *= r, e[2] *= n, e[6] *= i, e[10] *= r, e[3] *= n, e[7] *= i, e[11] *= r, this + }, + getMaxScaleOnAxis: function() { + var t = this.elements, + e = t[0] * t[0] + t[1] * t[1] + t[2] * t[2], + n = t[4] * t[4] + t[5] * t[5] + t[6] * t[6], + i = t[8] * t[8] + t[9] * t[9] + t[10] * t[10]; + return Math.sqrt(Math.max(e, n, i)) + }, + makeTranslation: function(t, e, n) { + return this.set(1, 0, 0, t, 0, 1, 0, e, 0, 0, 1, n, 0, 0, 0, 1), this + }, + makeRotationX: function(t) { + var e = Math.cos(t), + n = Math.sin(t); + return this.set(1, 0, 0, 0, 0, e, -n, 0, 0, n, e, 0, 0, 0, 0, 1), this + }, + makeRotationY: function(t) { + var e = Math.cos(t), + n = Math.sin(t); + return this.set(e, 0, n, 0, 0, 1, 0, 0, -n, 0, e, 0, 0, 0, 0, 1), this + }, + makeRotationZ: function(t) { + var e = Math.cos(t), + n = Math.sin(t); + return this.set(e, -n, 0, 0, n, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this + }, + makeRotationAxis: function(t, e) { + var n = Math.cos(e), + i = Math.sin(e), + r = 1 - n, + o = t.x, + a = t.y, + s = t.z, + c = r * o, + l = r * a; + return this.set(c * o + n, c * a - i * s, c * s + i * a, 0, c * a + i * s, l * a + n, l * s - i * o, 0, c * s - i * a, l * s + i * o, r * s * s + n, 0, 0, 0, 0, 1), this + }, + makeScale: function(t, e, n) { + return this.set(t, 0, 0, 0, 0, e, 0, 0, 0, 0, n, 0, 0, 0, 0, 1), this + }, + makeShear: function(t, e, n) { + return this.set(1, e, n, 0, t, 1, n, 0, t, e, 1, 0, 0, 0, 0, 1), this + }, + compose: function(t, e, n) { + var i = this.elements, + r = e._x, + o = e._y, + a = e._z, + s = e._w, + c = r + r, + l = o + o, + u = a + a, + h = r * c, + p = r * l, + d = r * u, + f = o * l, + m = o * u, + g = a * u, + v = s * c, + y = s * l, + x = s * u, + b = n.x, + _ = n.y, + w = n.z; + return i[0] = (1 - (f + g)) * b, i[1] = (p + x) * b, i[2] = (d - y) * b, i[3] = 0, i[4] = (p - x) * _, i[5] = (1 - (h + g)) * _, i[6] = (m + v) * _, i[7] = 0, i[8] = (d + y) * w, i[9] = (m - v) * w, i[10] = (1 - (h + f)) * w, i[11] = 0, i[12] = t.x, i[13] = t.y, i[14] = t.z, i[15] = 1, this + }, + decompose: function(t, e, n) { + var i, r, o, a = this.elements, + s = uc.set(a[0], a[1], a[2]).length(), + c = uc.set(a[4], a[5], a[6]).length(), + l = uc.set(a[8], a[9], a[10]).length(); + return this.determinant() < 0 && (s = -s), t.x = a[12], t.y = a[13], t.z = a[14], hc.copy(this), i = 1 / s, r = 1 / c, o = 1 / l, hc.elements[0] *= i, hc.elements[1] *= i, hc.elements[2] *= i, hc.elements[4] *= r, hc.elements[5] *= r, hc.elements[6] *= r, hc.elements[8] *= o, hc.elements[9] *= o, hc.elements[10] *= o, e.setFromRotationMatrix(hc), n.x = s, n.y = c, n.z = l, this + }, + makePerspective: function(t, e, n, i, r, o) { + var a, s, c, l, u, h, p; + return s = 2 * r / (e - t), c = 2 * r / (n - i), l = (e + t) / (e - t), u = (n + i) / (n - i), h = -(o + r) / (o - r), p = -2 * o * r / (o - r), (a = this.elements)[0] = s, a[4] = 0, a[8] = l, a[12] = 0, a[1] = 0, a[5] = c, a[9] = u, a[13] = 0, a[2] = 0, a[6] = 0, a[10] = h, a[14] = p, a[3] = 0, a[7] = 0, a[11] = -1, a[15] = 0, this + }, + makeOrthographic: function(t, e, n, i, r, o) { + var a = this.elements, + s = 1 / (e - t), + c = 1 / (n - i), + l = 1 / (o - r), + u = (e + t) * s, + h = (n + i) * c, + p = (o + r) * l; + return a[0] = 2 * s, a[4] = 0, a[8] = 0, a[12] = -u, a[1] = 0, a[5] = 2 * c, a[9] = 0, a[13] = -h, a[2] = 0, a[6] = 0, a[10] = -2 * l, a[14] = -p, a[3] = 0, a[7] = 0, a[11] = 0, a[15] = 1, this + }, + equals: function(t) { + var e, n = this.elements, + i = t.elements; + for (e = 0; e < 16; e++) + if (n[e] !== i[e]) return 0; + return 1 + }, + fromArray: function(t, e) { + void 0 === e && (e = 0); + for (var n = 0; n < 16; n++) this.elements[n] = t[n + e]; + return this + }, + toArray: function(t, e) { + void 0 === t && (t = []), void 0 === e && (e = 0); + var n = this.elements; + return t[e] = n[0], t[e + 1] = n[1], t[e + 2] = n[2], t[e + 3] = n[3], t[e + 4] = n[4], t[e + 5] = n[5], t[e + 6] = n[6], t[e + 7] = n[7], t[e + 8] = n[8], t[e + 9] = n[9], t[e + 10] = n[10], t[e + 11] = n[11], t[e + 12] = n[12], t[e + 13] = n[13], t[e + 14] = n[14], t[e + 15] = n[15], t + } + }), vc = new l, yc = new n, u.RotationOrders = ["XYZ", "YZX", "ZXY", "XZY", "YXZ", "ZYX"], u.DefaultOrder = "XYZ", Object.defineProperties(u.prototype, { + x: { + get: function() { + return this._x + }, + set: function(t) { + this._x = t, this._onChangeCallback() + } + }, + y: { + get: function() { + return this._y + }, + set: function(t) { + this._y = t, this._onChangeCallback() + } + }, + z: { + get: function() { + return this._z + }, + set: function(t) { + this._z = t, this._onChangeCallback() + } + }, + order: { + get: function() { + return this._order + }, + set: function(t) { + this._order = t, this._onChangeCallback() + } + } + }), Object.assign(u.prototype, { + isEuler: 1, + set: function(t, e, n, i) { + return this._x = t, this._y = e, this._z = n, this._order = i || this._order, this._onChangeCallback(), this + }, + clone: function() { + return new this.constructor(this._x, this._y, this._z, this._order) + }, + copy: function(t) { + return this._x = t._x, this._y = t._y, this._z = t._z, this._order = t._order, this._onChangeCallback(), this + }, + setFromRotationMatrix: function(t, e, n) { + var i = ic.clamp, + r = t.elements, + o = r[0], + a = r[4], + s = r[8], + c = r[1], + l = r[5], + u = r[9], + h = r[2], + p = r[6], + d = r[10]; + return "XYZ" === (e = e || this._order) ? (this._y = Math.asin(i(s, -1, 1)), Math.abs(s) < .9999999 ? (this._x = Math.atan2(-u, d), this._z = Math.atan2(-a, o)) : (this._x = Math.atan2(p, l), this._z = 0)) : "YXZ" === e ? (this._x = Math.asin(-i(u, -1, 1)), Math.abs(u) < .9999999 ? (this._y = Math.atan2(s, d), this._z = Math.atan2(c, l)) : (this._y = Math.atan2(-h, o), this._z = 0)) : "ZXY" === e ? (this._x = Math.asin(i(p, -1, 1)), Math.abs(p) < .9999999 ? (this._y = Math.atan2(-h, d), this._z = Math.atan2(-a, l)) : (this._y = 0, this._z = Math.atan2(c, o))) : "ZYX" === e ? (this._y = Math.asin(-i(h, -1, 1)), Math.abs(h) < .9999999 ? (this._x = Math.atan2(p, d), this._z = Math.atan2(c, o)) : (this._x = 0, this._z = Math.atan2(-a, l))) : "YZX" === e ? (this._z = Math.asin(i(c, -1, 1)), Math.abs(c) < .9999999 ? (this._x = Math.atan2(-u, l), this._y = Math.atan2(-h, o)) : (this._x = 0, this._y = Math.atan2(s, d))) : "XZY" === e && (this._z = Math.asin(-i(a, -1, 1)), Math.abs(a) < .9999999 ? (this._x = Math.atan2(p, l), this._y = Math.atan2(s, o)) : (this._x = Math.atan2(-u, d), this._y = 0)), this._order = e, 0 != n && this._onChangeCallback(), this + }, + setFromQuaternion: function(t, e, n) { + return vc.makeRotationFromQuaternion(t), this.setFromRotationMatrix(vc, e, n) + }, + setFromVector3: function(t, e) { + return this.set(t.x, t.y, t.z, e || this._order) + }, + reorder: function(t) { + return yc.setFromEuler(this), this.setFromQuaternion(yc, t) + }, + equals: function(t) { + return t._x === this._x && t._y === this._y && t._z === this._z && t._order === this._order + }, + fromArray: function(t) { + return this._x = t[0], this._y = t[1], this._z = t[2], void 0 !== t[3] && (this._order = t[3]), this._onChangeCallback(), this + }, + toArray: function(t, e) { + return void 0 === t && (t = []), void 0 === e && (e = 0), t[e] = this._x, t[e + 1] = this._y, t[e + 2] = this._z, t[e + 3] = this._order, t + }, + toVector3: function(t) { + return t ? t.set(this._x, this._y, this._z) : new i(this._x, this._y, this._z) + }, + _onChange: function(t) { + return this._onChangeCallback = t, this + }, + _onChangeCallback: function() {} + }), Object.assign(h.prototype, { + set: function(t) { + this.mask = 1 << t | 0 + }, + enable: function(t) { + this.mask |= 1 << t | 0 + }, + enableAll: function() { + this.mask = -1 + }, + toggle: function(t) { + this.mask ^= 1 << t | 0 + }, + disable: function(t) { + this.mask &= ~(1 << t | 0) + }, + disableAll: function() { + this.mask = 0 + }, + test: function(t) { + return 0 != (this.mask & t.mask) + } + }), xc = 0, bc = new i, _c = new n, wc = new l, Mc = new i, Sc = new i, Tc = new i, Ac = new n, Lc = new i(1, 0, 0), Cc = new i(0, 1, 0), Pc = new i(0, 0, 1), Ec = { + type: "added" + }, Nc = { + type: "removed" + }, p.DefaultUp = new i(0, 1, 0), p.DefaultMatrixAutoUpdate = 1, p.prototype = Object.assign(Object.create(t.prototype), { + constructor: p, + isObject3D: 1, + onBeforeRender: function() {}, + onAfterRender: function() {}, + applyMatrix: function(t) { + this.matrixAutoUpdate && this.updateMatrix(), this.matrix.premultiply(t), this.matrix.decompose(this.position, this.quaternion, this.scale) + }, + applyQuaternion: function(t) { + return this.quaternion.premultiply(t), this + }, + setRotationFromAxisAngle: function(t, e) { + this.quaternion.setFromAxisAngle(t, e) + }, + setRotationFromEuler: function(t) { + this.quaternion.setFromEuler(t, 1) + }, + setRotationFromMatrix: function(t) { + this.quaternion.setFromRotationMatrix(t) + }, + setRotationFromQuaternion: function(t) { + this.quaternion.copy(t) + }, + rotateOnAxis: function(t, e) { + return _c.setFromAxisAngle(t, e), this.quaternion.multiply(_c), this + }, + rotateOnWorldAxis: function(t, e) { + return _c.setFromAxisAngle(t, e), this.quaternion.premultiply(_c), this + }, + rotateX: function(t) { + return this.rotateOnAxis(Lc, t) + }, + rotateY: function(t) { + return this.rotateOnAxis(Cc, t) + }, + rotateZ: function(t) { + return this.rotateOnAxis(Pc, t) + }, + translateOnAxis: function(t, e) { + return bc.copy(t).applyQuaternion(this.quaternion), this.position.add(bc.multiplyScalar(e)), this + }, + translateX: function(t) { + return this.translateOnAxis(Lc, t) + }, + translateY: function(t) { + return this.translateOnAxis(Cc, t) + }, + translateZ: function(t) { + return this.translateOnAxis(Pc, t) + }, + localToWorld: function(t) { + return t.applyMatrix4(this.matrixWorld) + }, + worldToLocal: function(t) { + return t.applyMatrix4(wc.getInverse(this.matrixWorld)) + }, + lookAt: function(t, e, n) { + t.isVector3 ? Mc.copy(t) : Mc.set(t, e, n); + var i = this.parent; + this.updateWorldMatrix(1, 0), Sc.setFromMatrixPosition(this.matrixWorld), this.isCamera || this.isLight ? wc.lookAt(Sc, Mc, this.up) : wc.lookAt(Mc, Sc, this.up), this.quaternion.setFromRotationMatrix(wc), i && (wc.extractRotation(i.matrixWorld), _c.setFromRotationMatrix(wc), this.quaternion.premultiply(_c.inverse())) + }, + add: function(t) { + if (arguments.length > 1) { + for (var e = 0; e < arguments.length; e++) this.add(arguments[e]); + return this + } + return t === this ? this : (t && t.isObject3D && (null !== t.parent && t.parent.remove(t), t.parent = this, this.children.push(t), t.dispatchEvent(Ec)), this) + }, + remove: function(t) { + var e, n; + if (arguments.length > 1) { + for (e = 0; e < arguments.length; e++) this.remove(arguments[e]); + return this + } + return -1 !== (n = this.children.indexOf(t)) && (t.parent = null, this.children.splice(n, 1), t.dispatchEvent(Nc)), this + }, + attach: function(t) { + return this.updateWorldMatrix(1, 0), wc.getInverse(this.matrixWorld), null !== t.parent && (t.parent.updateWorldMatrix(1, 0), wc.multiply(t.parent.matrixWorld)), t.applyMatrix(wc), t.updateWorldMatrix(0, 0), this.add(t), this + }, + getObjectById: function(t) { + return this.getObjectByProperty("id", t) + }, + getObjectByName: function(t) { + return this.getObjectByProperty("name", t) + }, + getObjectByProperty: function(t, e) { + var n, i, r; + if (this[t] === e) return this; + for (n = 0, i = this.children.length; n < i; n++) + if (void 0 !== (r = this.children[n].getObjectByProperty(t, e))) return r + }, + getWorldPosition: function(t) { + return void 0 === t && (t = new i), this.updateMatrixWorld(1), t.setFromMatrixPosition(this.matrixWorld) + }, + getWorldQuaternion: function(t) { + return void 0 === t && (t = new n), this.updateMatrixWorld(1), this.matrixWorld.decompose(Sc, t, Tc), t + }, + getWorldScale: function(t) { + return void 0 === t && (t = new i), this.updateMatrixWorld(1), this.matrixWorld.decompose(Sc, Ac, t), t + }, + getWorldDirection: function(t) { + void 0 === t && (t = new i), this.updateMatrixWorld(1); + var e = this.matrixWorld.elements; + return t.set(e[8], e[9], e[10]).normalize() + }, + raycast: function() {}, + traverse: function(t) { + var e, n, i; + for (t(this), n = 0, i = (e = this.children).length; n < i; n++) e[n].traverse(t) + }, + traverseVisible: function(t) { + var e, n, i; + if (0 != this.visible) + for (t(this), n = 0, i = (e = this.children).length; n < i; n++) e[n].traverseVisible(t) + }, + traverseAncestors: function(t) { + var e = this.parent; + null !== e && (t(e), e.traverseAncestors(t)) + }, + updateMatrix: function() { + this.matrix.compose(this.position, this.quaternion, this.scale), this.matrixWorldNeedsUpdate = 1 + }, + updateMatrixWorld: function(t) { + var e, n, i; + for (this.matrixAutoUpdate && this.updateMatrix(), (this.matrixWorldNeedsUpdate || t) && (null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), this.matrixWorldNeedsUpdate = 0, t = 1), n = 0, i = (e = this.children).length; n < i; n++) e[n].updateMatrixWorld(t) + }, + updateWorldMatrix: function(t, e) { + var n, i, r, o = this.parent; + if (1 == t && null !== o && o.updateWorldMatrix(1, 0), this.matrixAutoUpdate && this.updateMatrix(), null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), 1 == e) + for (i = 0, r = (n = this.children).length; i < r; i++) n[i].updateWorldMatrix(0, 1) + }, + toJSON: function(t) { + function e(e, n) { + return void 0 === e[n.uuid] && (e[n.uuid] = n.toJSON(t)), n.uuid + } + + function n(t) { + var e, n, i = []; + for (e in t) delete(n = t[e]).metadata, i.push(n); + return i + } + var i, r, o, a, s, c, l, u, h, p, d, f = void 0 === t || "string" == typeof t, + m = {}; + if (f && (t = { + geometries: {}, + materials: {}, + textures: {}, + images: {}, + shapes: {} + }, m.metadata = { + version: 4.5, + type: "Object", + generator: "Object3D.toJSON" + }), (i = {}).uuid = this.uuid, i.type = this.type, "" !== this.name && (i.name = this.name), 1 == this.castShadow && (i.castShadow = 1), 1 == this.receiveShadow && (i.receiveShadow = 1), 0 == this.visible && (i.visible = 0), 0 == this.frustumCulled && (i.frustumCulled = 0), 0 !== this.renderOrder && (i.renderOrder = this.renderOrder), "{}" !== JSON.stringify(this.userData) && (i.userData = this.userData), i.layers = this.layers.mask, i.matrix = this.matrix.toArray(), 0 == this.matrixAutoUpdate && (i.matrixAutoUpdate = 0), this.isMesh && this.drawMode !== ks && (i.drawMode = this.drawMode), (this.isMesh || this.isLine || this.isPoints) && (i.geometry = e(t.geometries, this.geometry), void 0 !== (r = this.geometry.parameters) && void 0 !== r.shapes)) + if (o = r.shapes, Array.isArray(o)) + for (a = 0, s = o.length; a < s; a++) c = o[a], e(t.shapes, c); + else e(t.shapes, o); + if (void 0 !== this.material) + if (Array.isArray(this.material)) { + for (l = [], a = 0, s = this.material.length; a < s; a++) l.push(e(t.materials, this.material[a])); + i.material = l + } else i.material = e(t.materials, this.material); + if (this.children.length > 0) + for (i.children = [], a = 0; a < this.children.length; a++) i.children.push(this.children[a].toJSON(t).object); + return f && (u = n(t.geometries), h = n(t.materials), p = n(t.textures), d = n(t.images), o = n(t.shapes), u.length > 0 && (m.geometries = u), h.length > 0 && (m.materials = h), p.length > 0 && (m.textures = p), d.length > 0 && (m.images = d), o.length > 0 && (m.shapes = o)), m.object = i, m + }, + clone: function(t) { + return (new this.constructor).copy(this, t) + }, + copy: function(t, e) { + var n, i; + if (void 0 === e && (e = 1), this.name = t.name, this.up.copy(t.up), this.position.copy(t.position), this.quaternion.copy(t.quaternion), this.scale.copy(t.scale), this.matrix.copy(t.matrix), this.matrixWorld.copy(t.matrixWorld), this.matrixAutoUpdate = t.matrixAutoUpdate, this.matrixWorldNeedsUpdate = t.matrixWorldNeedsUpdate, this.layers.mask = t.layers.mask, this.visible = t.visible, this.castShadow = t.castShadow, this.receiveShadow = t.receiveShadow, this.frustumCulled = t.frustumCulled, this.renderOrder = t.renderOrder, this.userData = JSON.parse(JSON.stringify(t.userData)), 1 == e) + for (n = 0; n < t.children.length; n++) i = t.children[n], this.add(i.clone()); + return this + } + }), d.prototype = Object.assign(Object.create(p.prototype), { + constructor: d, + isScene: 1, + copy: function(t, e) { + return p.prototype.copy.call(this, t, e), null !== t.background && (this.background = t.background.clone()), null !== t.fog && (this.fog = t.fog.clone()), null !== t.overrideMaterial && (this.overrideMaterial = t.overrideMaterial.clone()), this.autoUpdate = t.autoUpdate, this.matrixAutoUpdate = t.matrixAutoUpdate, this + }, + toJSON: function(t) { + var e = p.prototype.toJSON.call(this, t); + return null !== this.background && (e.object.background = this.background.toJSON(t)), null !== this.fog && (e.object.fog = this.fog.toJSON()), e + }, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + } + }), Oc = [new i, new i, new i, new i, new i, new i, new i, new i], Dc = new i, Ic = new i, zc = new i, Rc = new i, Fc = new i, kc = new i, Bc = new i, Uc = new i, jc = new i, Vc = new i, Gc = new i, Object.assign(f.prototype, { + isBox3: 1, + set: function(t, e) { + return this.min.copy(t), this.max.copy(e), this + }, + setFromArray: function(t) { + var e, n, i, r, o, a = 1 / 0, + s = 1 / 0, + c = 1 / 0, + l = -1 / 0, + u = -1 / 0, + h = -1 / 0; + for (e = 0, n = t.length; e < n; e += 3)(i = t[e]) < a && (a = i), (r = t[e + 1]) < s && (s = r), (o = t[e + 2]) < c && (c = o), i > l && (l = i), r > u && (u = r), o > h && (h = o); + return this.min.set(a, s, c), this.max.set(l, u, h), this + }, + setFromBufferAttribute: function(t) { + var e, n, i, r, o, a = 1 / 0, + s = 1 / 0, + c = 1 / 0, + l = -1 / 0, + u = -1 / 0, + h = -1 / 0; + for (e = 0, n = t.count; e < n; e++)(i = t.getX(e)) < a && (a = i), (r = t.getY(e)) < s && (s = r), (o = t.getZ(e)) < c && (c = o), i > l && (l = i), r > u && (u = r), o > h && (h = o); + return this.min.set(a, s, c), this.max.set(l, u, h), this + }, + setFromPoints: function(t) { + this.makeEmpty(); + for (var e = 0, n = t.length; e < n; e++) this.expandByPoint(t[e]); + return this + }, + setFromCenterAndSize: function(t, e) { + var n = Dc.copy(e).multiplyScalar(.5); + return this.min.copy(t).sub(n), this.max.copy(t).add(n), this + }, + setFromObject: function(t) { + return this.makeEmpty(), this.expandByObject(t) + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + return this.min.copy(t.min), this.max.copy(t.max), this + }, + makeEmpty: function() { + return this.min.x = this.min.y = this.min.z = 1 / 0, this.max.x = this.max.y = this.max.z = -1 / 0, this + }, + isEmpty: function() { + return this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z + }, + getCenter: function(t) { + return void 0 === t && (t = new i), this.isEmpty() ? t.set(0, 0, 0) : t.addVectors(this.min, this.max).multiplyScalar(.5) + }, + getSize: function(t) { + return void 0 === t && (t = new i), this.isEmpty() ? t.set(0, 0, 0) : t.subVectors(this.max, this.min) + }, + expandByPoint: function(t) { + return this.min.min(t), this.max.max(t), this + }, + expandByVector: function(t) { + return this.min.sub(t), this.max.add(t), this + }, + expandByScalar: function(t) { + return this.min.addScalar(-t), this.max.addScalar(t), this + }, + expandByObject: function(t) { + var e, n, i, r, o, a; + if (t.updateWorldMatrix(0, 0), void 0 !== (i = t.geometry)) + if (i.isGeometry) + for (e = 0, n = (r = i.vertices).length; e < n; e++) Dc.copy(r[e]), Dc.applyMatrix4(t.matrixWorld), this.expandByPoint(Dc); + else if (i.isBufferGeometry && void 0 !== (o = i.attributes.position)) + for (e = 0, n = o.count; e < n; e++) Dc.fromBufferAttribute(o, e).applyMatrix4(t.matrixWorld), this.expandByPoint(Dc); + for (e = 0, n = (a = t.children).length; e < n; e++) this.expandByObject(a[e]); + return this + }, + containsPoint: function(t) { + return t.x < this.min.x || t.x > this.max.x || t.y < this.min.y || t.y > this.max.y || t.z < this.min.z || t.z > this.max.z ? 0 : 1 + }, + containsBox: function(t) { + return this.min.x <= t.min.x && t.max.x <= this.max.x && this.min.y <= t.min.y && t.max.y <= this.max.y && this.min.z <= t.min.z && t.max.z <= this.max.z + }, + getParameter: function(t, e) { + return void 0 === e && (e = new i), e.set((t.x - this.min.x) / (this.max.x - this.min.x), (t.y - this.min.y) / (this.max.y - this.min.y), (t.z - this.min.z) / (this.max.z - this.min.z)) + }, + intersectsBox: function(t) { + return t.max.x < this.min.x || t.min.x > this.max.x || t.max.y < this.min.y || t.min.y > this.max.y || t.max.z < this.min.z || t.min.z > this.max.z ? 0 : 1 + }, + intersectsSphere: function(t) { + return this.clampPoint(t.center, Dc), Dc.distanceToSquared(t.center) <= t.radius * t.radius + }, + intersectsPlane: function(t) { + var e, n; + return t.normal.x > 0 ? (e = t.normal.x * this.min.x, n = t.normal.x * this.max.x) : (e = t.normal.x * this.max.x, n = t.normal.x * this.min.x), t.normal.y > 0 ? (e += t.normal.y * this.min.y, n += t.normal.y * this.max.y) : (e += t.normal.y * this.max.y, n += t.normal.y * this.min.y), t.normal.z > 0 ? (e += t.normal.z * this.min.z, n += t.normal.z * this.max.z) : (e += t.normal.z * this.max.z, n += t.normal.z * this.min.z), e <= -t.constant && n >= -t.constant + }, + intersectsTriangle: function(t) { + if (this.isEmpty()) return 0; + this.getCenter(Uc), jc.subVectors(this.max, Uc), Ic.subVectors(t.a, Uc), zc.subVectors(t.b, Uc), Rc.subVectors(t.c, Uc), Fc.subVectors(zc, Ic), kc.subVectors(Rc, zc), Bc.subVectors(Ic, Rc); + var e = [0, -Fc.z, Fc.y, 0, -kc.z, kc.y, 0, -Bc.z, Bc.y, Fc.z, 0, -Fc.x, kc.z, 0, -kc.x, Bc.z, 0, -Bc.x, -Fc.y, Fc.x, 0, -kc.y, kc.x, 0, -Bc.y, Bc.x, 0]; + return m(e, Ic, zc, Rc, jc) && m(e = [1, 0, 0, 0, 1, 0, 0, 0, 1], Ic, zc, Rc, jc) ? (Vc.crossVectors(Fc, kc), m(e = [Vc.x, Vc.y, Vc.z], Ic, zc, Rc, jc)) : 0 + }, + clampPoint: function(t, e) { + return void 0 === e && (e = new i), e.copy(t).clamp(this.min, this.max) + }, + distanceToPoint: function(t) { + return Dc.copy(t).clamp(this.min, this.max).sub(t).length() + }, + getBoundingSphere: function(t) { + return this.getCenter(t.center), t.radius = .5 * this.getSize(Dc).length(), t + }, + intersect: function(t) { + return this.min.max(t.min), this.max.min(t.max), this.isEmpty() && this.makeEmpty(), this + }, + union: function(t) { + return this.min.min(t.min), this.max.max(t.max), this + }, + applyMatrix4: function(t) { + return this.isEmpty() ? this : (Oc[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(t), Oc[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(t), Oc[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(t), Oc[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(t), Oc[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(t), Oc[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(t), Oc[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(t), Oc[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(t), this.setFromPoints(Oc), this) + }, + translate: function(t) { + return this.min.add(t), this.max.add(t), this + }, + equals: function(t) { + return t.min.equals(this.min) && t.max.equals(this.max) + } + }), Wc = new f, Object.assign(g.prototype, { + set: function(t, e) { + return this.center.copy(t), this.radius = e, this + }, + setFromPoints: function(t, e) { + var n, i, r, o = this.center; + for (void 0 !== e ? o.copy(e) : Wc.setFromPoints(t).getCenter(o), n = 0, i = 0, r = t.length; i < r; i++) n = Math.max(n, o.distanceToSquared(t[i])); + return this.radius = Math.sqrt(n), this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + return this.center.copy(t.center), this.radius = t.radius, this + }, + empty: function() { + return this.radius <= 0 + }, + containsPoint: function(t) { + return t.distanceToSquared(this.center) <= this.radius * this.radius + }, + distanceToPoint: function(t) { + return t.distanceTo(this.center) - this.radius + }, + intersectsSphere: function(t) { + var e = this.radius + t.radius; + return t.center.distanceToSquared(this.center) <= e * e + }, + intersectsBox: function(t) { + return t.intersectsSphere(this) + }, + intersectsPlane: function(t) { + return Math.abs(t.distanceToPoint(this.center)) <= this.radius + }, + clampPoint: function(t, e) { + var n = this.center.distanceToSquared(t); + return void 0 === e && (e = new i), e.copy(t), n > this.radius * this.radius && (e.sub(this.center).normalize(), e.multiplyScalar(this.radius).add(this.center)), e + }, + getBoundingBox: function(t) { + return void 0 === t && (t = new f), t.set(this.center, this.center), t.expandByScalar(this.radius), t + }, + applyMatrix4: function(t) { + return this.center.applyMatrix4(t), this.radius = this.radius * t.getMaxScaleOnAxis(), this + }, + translate: function(t) { + return this.center.add(t), this + }, + equals: function(t) { + return t.center.equals(this.center) && t.radius === this.radius + } + }), Hc = new i, qc = new i, Xc = new i, Yc = new i, Zc = new i, Jc = new i, $c = new i, Object.assign(v.prototype, { + set: function(t, e) { + return this.origin.copy(t), this.direction.copy(e), this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + return this.origin.copy(t.origin), this.direction.copy(t.direction), this + }, + at: function(t, e) { + return void 0 === e && (e = new i), e.copy(this.direction).multiplyScalar(t).add(this.origin) + }, + lookAt: function(t) { + return this.direction.copy(t).sub(this.origin).normalize(), this + }, + recast: function(t) { + return this.origin.copy(this.at(t, Hc)), this + }, + closestPointToPoint: function(t, e) { + void 0 === e && (e = new i), e.subVectors(t, this.origin); + var n = e.dot(this.direction); + return n < 0 ? e.copy(this.origin) : e.copy(this.direction).multiplyScalar(n).add(this.origin) + }, + distanceToPoint: function(t) { + return Math.sqrt(this.distanceSqToPoint(t)) + }, + distanceSqToPoint: function(t) { + var e = Hc.subVectors(t, this.origin).dot(this.direction); + return e < 0 ? this.origin.distanceToSquared(t) : (Hc.copy(this.direction).multiplyScalar(e).add(this.origin), Hc.distanceToSquared(t)) + }, + distanceSqToSegment: function(t, e, n, i) { + var r, o, a, s, c, l, u, h, p, d, f; + return qc.copy(t).add(e).multiplyScalar(.5), Xc.copy(e).sub(t).normalize(), Yc.copy(this.origin).sub(qc), r = .5 * t.distanceTo(e), o = -this.direction.dot(Xc), a = Yc.dot(this.direction), s = -Yc.dot(Xc), c = Yc.lengthSq(), (l = Math.abs(1 - o * o)) > 0 ? (h = o * a - s, d = r * l, (u = o * s - a) >= 0 ? p = h >= -d ? h <= d ? (u *= f = 1 / l) * (u + o * (h *= f) + 2 * a) + h * (o * u + h + 2 * s) + c : -(u = Math.max(0, -(o * (h = r) + a))) * u + h * (h + 2 * s) + c : -(u = Math.max(0, -(o * (h = -r) + a))) * u + h * (h + 2 * s) + c : h <= -d ? p = -(u = Math.max(0, -(-o * r + a))) * u + (h = u > 0 ? -r : Math.min(Math.max(-r, -s), r)) * (h + 2 * s) + c : h <= d ? (u = 0, p = (h = Math.min(Math.max(-r, -s), r)) * (h + 2 * s) + c) : p = -(u = Math.max(0, -(o * r + a))) * u + (h = u > 0 ? r : Math.min(Math.max(-r, -s), r)) * (h + 2 * s) + c) : p = -(u = Math.max(0, -(o * (h = o > 0 ? -r : r) + a))) * u + h * (h + 2 * s) + c, n && n.copy(this.direction).multiplyScalar(u).add(this.origin), i && i.copy(Xc).multiplyScalar(h).add(qc), p + }, + intersectSphere: function(t, e) { + var n, i, r, o, a, s; + return Hc.subVectors(t.center, this.origin), n = Hc.dot(this.direction), (i = Hc.dot(Hc) - n * n) > (r = t.radius * t.radius) ? null : (s = n + (o = Math.sqrt(r - i)), (a = n - o) < 0 && s < 0 ? null : a < 0 ? this.at(s, e) : this.at(a, e)) + }, + intersectsSphere: function(t) { + return this.distanceSqToPoint(t.center) <= t.radius * t.radius + }, + distanceToPlane: function(t) { + var e, n = t.normal.dot(this.direction); + return 0 === n ? 0 === t.distanceToPoint(this.origin) ? 0 : null : (e = -(this.origin.dot(t.normal) + t.constant) / n) >= 0 ? e : null + }, + intersectPlane: function(t, e) { + var n = this.distanceToPlane(t); + return null === n ? null : this.at(n, e) + }, + intersectsPlane: function(t) { + var e = t.distanceToPoint(this.origin); + return 0 === e ? 1 : t.normal.dot(this.direction) * e < 0 ? 1 : 0 + }, + intersectBox: function(t, e) { + var n, i, r, o, a, s, c = 1 / this.direction.x, + l = 1 / this.direction.y, + u = 1 / this.direction.z, + h = this.origin; + return c >= 0 ? (n = (t.min.x - h.x) * c, i = (t.max.x - h.x) * c) : (n = (t.max.x - h.x) * c, i = (t.min.x - h.x) * c), l >= 0 ? (r = (t.min.y - h.y) * l, o = (t.max.y - h.y) * l) : (r = (t.max.y - h.y) * l, o = (t.min.y - h.y) * l), n > o || r > i ? null : ((r > n || n != n) && (n = r), (o < i || i != i) && (i = o), u >= 0 ? (a = (t.min.z - h.z) * u, s = (t.max.z - h.z) * u) : (a = (t.max.z - h.z) * u, s = (t.min.z - h.z) * u), n > s || a > i ? null : ((a > n || n != n) && (n = a), (s < i || i != i) && (i = s), i < 0 ? null : this.at(n >= 0 ? n : i, e))) + }, + intersectsBox: function(t) { + return null !== this.intersectBox(t, Hc) + }, + intersectTriangle: function(t, e, n, i, r) { + var o, a, s, c, l; + if (Zc.subVectors(e, t), Jc.subVectors(n, t), $c.crossVectors(Zc, Jc), (o = this.direction.dot($c)) > 0) { + if (i) return null; + a = 1 + } else { + if (!(o < 0)) return null; + a = -1, o = -o + } + return Yc.subVectors(this.origin, t), (s = a * this.direction.dot(Jc.crossVectors(Yc, Jc))) < 0 ? null : (c = a * this.direction.dot(Zc.cross(Yc))) < 0 ? null : s + c > o ? null : (l = -a * Yc.dot($c)) < 0 ? null : this.at(l / o, r) + }, + applyMatrix4: function(t) { + return this.origin.applyMatrix4(t), this.direction.transformDirection(t), this + }, + equals: function(t) { + return t.origin.equals(this.origin) && t.direction.equals(this.direction) + } + }), Qc = new i, Kc = new i, tl = new i, el = new i, nl = new i, il = new i, rl = new i, ol = new i, al = new i, sl = new i, Object.assign(y, { + getNormal: function(t, e, n, r) { + void 0 === r && (r = new i), r.subVectors(n, e), Qc.subVectors(t, e), r.cross(Qc); + var o = r.lengthSq(); + return o > 0 ? r.multiplyScalar(1 / Math.sqrt(o)) : r.set(0, 0, 0) + }, + getBarycoord: function(t, e, n, r, o) { + var a, s, c, l, u, h, p, d, f; + return Qc.subVectors(r, e), Kc.subVectors(n, e), tl.subVectors(t, e), a = Qc.dot(Qc), s = Qc.dot(Kc), c = Qc.dot(tl), l = Kc.dot(Kc), u = Kc.dot(tl), h = a * l - s * s, void 0 === o && (o = new i), 0 === h ? o.set(-2, -1, -1) : (d = (l * c - s * u) * (p = 1 / h), f = (a * u - s * c) * p, o.set(1 - d - f, f, d)) + }, + containsPoint: function(t, e, n, i) { + return y.getBarycoord(t, e, n, i, el), el.x >= 0 && el.y >= 0 && el.x + el.y <= 1 + }, + getUV: function(t, e, n, i, r, o, a, s) { + return this.getBarycoord(t, e, n, i, el), s.set(0, 0), s.addScaledVector(r, el.x), s.addScaledVector(o, el.y), s.addScaledVector(a, el.z), s + }, + isFrontFacing: function(t, e, n, i) { + return Qc.subVectors(n, e), Kc.subVectors(t, e), Qc.cross(Kc).dot(i) < 0 ? 1 : 0 + } + }), Object.assign(y.prototype, { + set: function(t, e, n) { + return this.a.copy(t), this.b.copy(e), this.c.copy(n), this + }, + setFromPointsAndIndices: function(t, e, n, i) { + return this.a.copy(t[e]), this.b.copy(t[n]), this.c.copy(t[i]), this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + return this.a.copy(t.a), this.b.copy(t.b), this.c.copy(t.c), this + }, + getArea: function() { + return Qc.subVectors(this.c, this.b), Kc.subVectors(this.a, this.b), .5 * Qc.cross(Kc).length() + }, + getMidpoint: function(t) { + return void 0 === t && (t = new i), t.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3) + }, + getNormal: function(t) { + return y.getNormal(this.a, this.b, this.c, t) + }, + getPlane: function(t) { + return void 0 === t && (t = new i), t.setFromCoplanarPoints(this.a, this.b, this.c) + }, + getBarycoord: function(t, e) { + return y.getBarycoord(t, this.a, this.b, this.c, e) + }, + getUV: function(t, e, n, i, r) { + return y.getUV(t, this.a, this.b, this.c, e, n, i, r) + }, + containsPoint: function(t) { + return y.containsPoint(t, this.a, this.b, this.c) + }, + isFrontFacing: function(t) { + return y.isFrontFacing(this.a, this.b, this.c, t) + }, + intersectsBox: function(t) { + return t.intersectsTriangle(this) + }, + closestPointToPoint: function(t, e) { + var n, r, o, a, s, c, l, u, h, p, d, f, m, g, v; + return void 0 === e && (e = new i), n = this.a, r = this.b, o = this.c, nl.subVectors(r, n), il.subVectors(o, n), ol.subVectors(t, n), c = nl.dot(ol), l = il.dot(ol), c <= 0 && l <= 0 ? e.copy(n) : (al.subVectors(t, r), u = nl.dot(al), h = il.dot(al), u >= 0 && h <= u ? e.copy(r) : (p = c * h - u * l) <= 0 && c >= 0 && u <= 0 ? (a = c / (c - u), e.copy(n).addScaledVector(nl, a)) : (sl.subVectors(t, o), d = nl.dot(sl), (f = il.dot(sl)) >= 0 && d <= f ? e.copy(o) : (m = d * l - c * f) <= 0 && l >= 0 && f <= 0 ? (s = l / (l - f), e.copy(n).addScaledVector(il, s)) : (g = u * f - d * h) <= 0 && h - u >= 0 && d - f >= 0 ? (rl.subVectors(o, r), s = (h - u) / (h - u + (d - f)), e.copy(r).addScaledVector(rl, s)) : (a = m * (v = 1 / (g + m + p)), s = p * v, e.copy(n).addScaledVector(nl, a).addScaledVector(il, s)))) + }, + equals: function(t) { + return t.a.equals(this.a) && t.b.equals(this.b) && t.c.equals(this.c) + } + }), cl = { + aliceblue: 15792383, + antiquewhite: 16444375, + aqua: 65535, + aquamarine: 8388564, + azure: 15794175, + beige: 16119260, + bisque: 16770244, + black: 0, + blanchedalmond: 16772045, + blue: 255, + blueviolet: 9055202, + brown: 10824234, + burlywood: 14596231, + cadetblue: 6266528, + chartreuse: 8388352, + chocolate: 13789470, + coral: 16744272, + cornflowerblue: 6591981, + cornsilk: 16775388, + crimson: 14423100, + cyan: 65535, + darkblue: 139, + darkcyan: 35723, + darkgoldenrod: 12092939, + darkgray: 11119017, + darkgreen: 25600, + darkgrey: 11119017, + darkkhaki: 12433259, + darkmagenta: 9109643, + darkolivegreen: 5597999, + darkorange: 16747520, + darkorchid: 10040012, + darkred: 9109504, + darksalmon: 15308410, + darkseagreen: 9419919, + darkslateblue: 4734347, + darkslategray: 3100495, + darkslategrey: 3100495, + darkturquoise: 52945, + darkviolet: 9699539, + deeppink: 16716947, + deepskyblue: 49151, + dimgray: 6908265, + dimgrey: 6908265, + dodgerblue: 2003199, + firebrick: 11674146, + floralwhite: 16775920, + forestgreen: 2263842, + fuchsia: 16711935, + gainsboro: 14474460, + ghostwhite: 16316671, + gold: 16766720, + goldenrod: 14329120, + gray: 8421504, + green: 32768, + greenyellow: 11403055, + grey: 8421504, + honeydew: 15794160, + hotpink: 16738740, + indianred: 13458524, + indigo: 4915330, + ivory: 16777200, + khaki: 15787660, + lavender: 15132410, + lavenderblush: 16773365, + lawngreen: 8190976, + lemonchiffon: 16775885, + lightblue: 11393254, + lightcoral: 15761536, + lightcyan: 14745599, + lightgoldenrodyellow: 16448210, + lightgray: 13882323, + lightgreen: 9498256, + lightgrey: 13882323, + lightpink: 16758465, + lightsalmon: 16752762, + lightseagreen: 2142890, + lightskyblue: 8900346, + lightslategray: 7833753, + lightslategrey: 7833753, + lightsteelblue: 11584734, + lightyellow: 16777184, + lime: 65280, + limegreen: 3329330, + linen: 16445670, + magenta: 16711935, + maroon: 8388608, + mediumaquamarine: 6737322, + mediumblue: 205, + mediumorchid: 12211667, + mediumpurple: 9662683, + mediumseagreen: 3978097, + mediumslateblue: 8087790, + mediumspringgreen: 64154, + mediumturquoise: 4772300, + mediumvioletred: 13047173, + midnightblue: 1644912, + mintcream: 16121850, + mistyrose: 16770273, + moccasin: 16770229, + navajowhite: 16768685, + navy: 128, + oldlace: 16643558, + olive: 8421376, + olivedrab: 7048739, + orange: 16753920, + orangered: 16729344, + orchid: 14315734, + palegoldenrod: 15657130, + palegreen: 10025880, + paleturquoise: 11529966, + palevioletred: 14381203, + papayawhip: 16773077, + peachpuff: 16767673, + peru: 13468991, + pink: 16761035, + plum: 14524637, + powderblue: 11591910, + purple: 8388736, + rebeccapurple: 6697881, + red: 16711680, + rosybrown: 12357519, + royalblue: 4286945, + saddlebrown: 9127187, + salmon: 16416882, + sandybrown: 16032864, + seagreen: 3050327, + seashell: 16774638, + sienna: 10506797, + silver: 12632256, + skyblue: 8900331, + slateblue: 6970061, + slategray: 7372944, + slategrey: 7372944, + snow: 16775930, + springgreen: 65407, + steelblue: 4620980, + tan: 13808780, + teal: 32896, + thistle: 14204888, + tomato: 16737095, + turquoise: 4251856, + violet: 15631086, + wheat: 16113331, + white: 16777215, + whitesmoke: 16119285, + yellow: 16776960, + yellowgreen: 10145074 + }, ll = { + h: 0, + s: 0, + l: 0 + }, ul = { + h: 0, + s: 0, + l: 0 + }, Object.assign(x.prototype, { + isColor: 1, + r: 1, + g: 1, + b: 1, + set: function(t) { + return t && t.isColor ? this.copy(t) : "number" == typeof t ? this.setHex(t) : "string" == typeof t && this.setStyle(t), this + }, + setScalar: function(t) { + return this.r = t, this.g = t, this.b = t, this + }, + setHex: function(t) { + return t = Math.floor(t), this.r = (t >> 16 & 255) / 255, this.g = (t >> 8 & 255) / 255, this.b = (255 & t) / 255, this + }, + setRGB: function(t, e, n) { + return this.r = t, this.g = e, this.b = n, this + }, + setHSL: function(t, e, n) { + var i, r; + return t = ic.euclideanModulo(t, 1), e = ic.clamp(e, 0, 1), n = ic.clamp(n, 0, 1), 0 === e ? this.r = this.g = this.b = n : (r = 2 * n - (i = n <= .5 ? n * (1 + e) : n + e - n * e), this.r = b(r, i, t + 1 / 3), this.g = b(r, i, t), this.b = b(r, i, t - 1 / 3)), this + }, + setStyle: function(t) { + var e, n, i, r, o, a, s, c, l; + if (e = /^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(t)) switch (i = e[1], r = e[2], i) { + case "rgb": + case "rgba": + if (n = /^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(r)) return this.r = Math.min(255, parseInt(n[1], 10)) / 255, this.g = Math.min(255, parseInt(n[2], 10)) / 255, this.b = Math.min(255, parseInt(n[3], 10)) / 255, n[5], this; + if (n = /^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(r)) return this.r = Math.min(100, parseInt(n[1], 10)) / 100, this.g = Math.min(100, parseInt(n[2], 10)) / 100, this.b = Math.min(100, parseInt(n[3], 10)) / 100, n[5], this; + break; + case "hsl": + case "hsla": + if (n = /^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(r)) return o = parseFloat(n[1]) / 360, a = parseInt(n[2], 10) / 100, s = parseInt(n[3], 10) / 100, n[5], this.setHSL(o, a, s) + } else if (e = /^\#([A-Fa-f0-9]+)$/.exec(t)) { + if (3 === (l = (c = e[1]).length)) return this.r = parseInt(c.charAt(0) + c.charAt(0), 16) / 255, this.g = parseInt(c.charAt(1) + c.charAt(1), 16) / 255, this.b = parseInt(c.charAt(2) + c.charAt(2), 16) / 255, this; + if (6 === l) return this.r = parseInt(c.charAt(0) + c.charAt(1), 16) / 255, this.g = parseInt(c.charAt(2) + c.charAt(3), 16) / 255, this.b = parseInt(c.charAt(4) + c.charAt(5), 16) / 255, this + } + return t && t.length > 0 && void 0 !== (c = cl[t]) && this.setHex(c), this + }, + clone: function() { + return new this.constructor(this.r, this.g, this.b) + }, + copy: function(t) { + return this.r = t.r, this.g = t.g, this.b = t.b, this + }, + copyGammaToLinear: function(t, e) { + return void 0 === e && (e = 2), this.r = Math.pow(t.r, e), this.g = Math.pow(t.g, e), this.b = Math.pow(t.b, e), this + }, + copyLinearToGamma: function(t, e) { + void 0 === e && (e = 2); + var n = e > 0 ? 1 / e : 1; + return this.r = Math.pow(t.r, n), this.g = Math.pow(t.g, n), this.b = Math.pow(t.b, n), this + }, + convertGammaToLinear: function(t) { + return this.copyGammaToLinear(this, t), this + }, + convertLinearToGamma: function(t) { + return this.copyLinearToGamma(this, t), this + }, + copySRGBToLinear: function(t) { + return this.r = _(t.r), this.g = _(t.g), this.b = _(t.b), this + }, + copyLinearToSRGB: function(t) { + return this.r = w(t.r), this.g = w(t.g), this.b = w(t.b), this + }, + convertSRGBToLinear: function() { + return this.copySRGBToLinear(this), this + }, + convertLinearToSRGB: function() { + return this.copyLinearToSRGB(this), this + }, + getHex: function() { + return 255 * this.r << 16 ^ 255 * this.g << 8 ^ 255 * this.b << 0 + }, + getHexString: function() { + return ("000000" + this.getHex().toString(16)).slice(-6) + }, + getHSL: function(t) { + var e, n, i, r, o, a, s, c, l; + if (void 0 === t && (t = { + h: 0, + s: 0, + l: 0 + }), e = this.r, n = this.g, i = this.b, r = Math.max(e, n, i), c = ((o = Math.min(e, n, i)) + r) / 2, o === r) a = 0, s = 0; + else { + switch (l = r - o, s = c <= .5 ? l / (r + o) : l / (2 - r - o), r) { + case e: + a = (n - i) / l + (n < i ? 6 : 0); + break; + case n: + a = (i - e) / l + 2; + break; + case i: + a = (e - n) / l + 4 + } + a /= 6 + } + return t.h = a, t.s = s, t.l = c, t + }, + getStyle: function() { + return "rgb(" + (255 * this.r | 0) + "," + (255 * this.g | 0) + "," + (255 * this.b | 0) + ")" + }, + offsetHSL: function(t, e, n) { + return this.getHSL(ll), ll.h += t, ll.s += e, ll.l += n, this.setHSL(ll.h, ll.s, ll.l), this + }, + add: function(t) { + return this.r += t.r, this.g += t.g, this.b += t.b, this + }, + addColors: function(t, e) { + return this.r = t.r + e.r, this.g = t.g + e.g, this.b = t.b + e.b, this + }, + addScalar: function(t) { + return this.r += t, this.g += t, this.b += t, this + }, + sub: function(t) { + return this.r = Math.max(0, this.r - t.r), this.g = Math.max(0, this.g - t.g), this.b = Math.max(0, this.b - t.b), this + }, + multiply: function(t) { + return this.r *= t.r, this.g *= t.g, this.b *= t.b, this + }, + multiplyScalar: function(t) { + return this.r *= t, this.g *= t, this.b *= t, this + }, + lerp: function(t, e) { + return this.r += (t.r - this.r) * e, this.g += (t.g - this.g) * e, this.b += (t.b - this.b) * e, this + }, + lerpHSL: function(t, e) { + var n, i, r; + return this.getHSL(ll), t.getHSL(ul), n = ic.lerp(ll.h, ul.h, e), i = ic.lerp(ll.s, ul.s, e), r = ic.lerp(ll.l, ul.l, e), this.setHSL(n, i, r), this + }, + equals: function(t) { + return t.r === this.r && t.g === this.g && t.b === this.b + }, + fromArray: function(t, e) { + return void 0 === e && (e = 0), this.r = t[e], this.g = t[e + 1], this.b = t[e + 2], this + }, + toArray: function(t, e) { + return void 0 === t && (t = []), void 0 === e && (e = 0), t[e] = this.r, t[e + 1] = this.g, t[e + 2] = this.b, t + }, + toJSON: function() { + return this.getHex() + } + }), Object.assign(M.prototype, { + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + var e, n; + for (this.a = t.a, this.b = t.b, this.c = t.c, this.normal.copy(t.normal), this.color.copy(t.color), this.materialIndex = t.materialIndex, e = 0, n = t.vertexNormals.length; e < n; e++) this.vertexNormals[e] = t.vertexNormals[e].clone(); + for (e = 0, n = t.vertexColors.length; e < n; e++) this.vertexColors[e] = t.vertexColors[e].clone(); + return this + } + }), hl = 0, S.prototype = Object.assign(Object.create(t.prototype), { + constructor: S, + isMaterial: 1, + onBeforeCompile: function() {}, + setValues: function(t) { + var e, n, i; + if (void 0 !== t) + for (e in t) void 0 !== (n = t[e]) && ("shading" !== e ? void 0 !== (i = this[e]) && (i && i.isColor ? i.set(n) : i && i.isVector3 && n && n.isVector3 ? i.copy(n) : this[e] = n) : this.flatShading = 1 === n ? 1 : 0) + }, + toJSON: function(t) { + function e(t) { + var e, n, i = []; + for (e in t) delete(n = t[e]).metadata, i.push(n); + return i + } + var n, i, r, o = void 0 === t || "string" == typeof t; + return o && (t = { + textures: {}, + images: {} + }), (n = { + metadata: { + version: 4.5, + type: "Material", + generator: "Material.toJSON" + } + }).uuid = this.uuid, n.type = this.type, "" !== this.name && (n.name = this.name), this.color && this.color.isColor && (n.color = this.color.getHex()), void 0 !== this.roughness && (n.roughness = this.roughness), void 0 !== this.metalness && (n.metalness = this.metalness), this.sheen && this.sheen.isColor && (n.sheen = this.sheen.getHex()), this.emissive && this.emissive.isColor && (n.emissive = this.emissive.getHex()), this.emissiveIntensity && 1 !== this.emissiveIntensity && (n.emissiveIntensity = this.emissiveIntensity), this.specular && this.specular.isColor && (n.specular = this.specular.getHex()), void 0 !== this.shininess && (n.shininess = this.shininess), void 0 !== this.clearcoat && (n.clearcoat = this.clearcoat), void 0 !== this.clearcoatRoughness && (n.clearcoatRoughness = this.clearcoatRoughness), this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture && (n.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(t).uuid, n.clearcoatNormalScale = this.clearcoatNormalScale.toArray()), this.map && this.map.isTexture && (n.map = this.map.toJSON(t).uuid), this.matcap && this.matcap.isTexture && (n.matcap = this.matcap.toJSON(t).uuid), this.alphaMap && this.alphaMap.isTexture && (n.alphaMap = this.alphaMap.toJSON(t).uuid), this.lightMap && this.lightMap.isTexture && (n.lightMap = this.lightMap.toJSON(t).uuid), this.aoMap && this.aoMap.isTexture && (n.aoMap = this.aoMap.toJSON(t).uuid, n.aoMapIntensity = this.aoMapIntensity), this.bumpMap && this.bumpMap.isTexture && (n.bumpMap = this.bumpMap.toJSON(t).uuid, n.bumpScale = this.bumpScale), this.normalMap && this.normalMap.isTexture && (n.normalMap = this.normalMap.toJSON(t).uuid, n.normalMapType = this.normalMapType, n.normalScale = this.normalScale.toArray()), this.displacementMap && this.displacementMap.isTexture && (n.displacementMap = this.displacementMap.toJSON(t).uuid, n.displacementScale = this.displacementScale, n.displacementBias = this.displacementBias), this.roughnessMap && this.roughnessMap.isTexture && (n.roughnessMap = this.roughnessMap.toJSON(t).uuid), this.metalnessMap && this.metalnessMap.isTexture && (n.metalnessMap = this.metalnessMap.toJSON(t).uuid), this.emissiveMap && this.emissiveMap.isTexture && (n.emissiveMap = this.emissiveMap.toJSON(t).uuid), this.specularMap && this.specularMap.isTexture && (n.specularMap = this.specularMap.toJSON(t).uuid), this.envMap && this.envMap.isTexture && (n.envMap = this.envMap.toJSON(t).uuid, n.reflectivity = this.reflectivity, n.refractionRatio = this.refractionRatio, void 0 !== this.combine && (n.combine = this.combine), void 0 !== this.envMapIntensity && (n.envMapIntensity = this.envMapIntensity)), this.gradientMap && this.gradientMap.isTexture && (n.gradientMap = this.gradientMap.toJSON(t).uuid), void 0 !== this.size && (n.size = this.size), void 0 !== this.sizeAttenuation && (n.sizeAttenuation = this.sizeAttenuation), this.blending !== Xo && (n.blending = this.blending), 1 == this.flatShading && (n.flatShading = this.flatShading), this.side !== Uo && (n.side = this.side), this.vertexColors !== Go && (n.vertexColors = this.vertexColors), this.opacity < 1 && (n.opacity = this.opacity), 1 == this.transparent && (n.transparent = this.transparent), n.depthFunc = this.depthFunc, n.depthTest = this.depthTest, n.depthWrite = this.depthWrite, n.stencilWrite = this.stencilWrite, n.stencilWriteMask = this.stencilWriteMask, n.stencilFunc = this.stencilFunc, n.stencilRef = this.stencilRef, n.stencilFuncMask = this.stencilFuncMask, n.stencilFail = this.stencilFail, n.stencilZFail = this.stencilZFail, n.stencilZPass = this.stencilZPass, this.rotation && 0 !== this.rotation && (n.rotation = this.rotation), 1 == this.polygonOffset && (n.polygonOffset = 1), 0 !== this.polygonOffsetFactor && (n.polygonOffsetFactor = this.polygonOffsetFactor), 0 !== this.polygonOffsetUnits && (n.polygonOffsetUnits = this.polygonOffsetUnits), this.linewidth && 1 !== this.linewidth && (n.linewidth = this.linewidth), void 0 !== this.dashSize && (n.dashSize = this.dashSize), void 0 !== this.gapSize && (n.gapSize = this.gapSize), void 0 !== this.scale && (n.scale = this.scale), 1 == this.dithering && (n.dithering = 1), this.alphaTest > 0 && (n.alphaTest = this.alphaTest), 1 == this.premultipliedAlpha && (n.premultipliedAlpha = this.premultipliedAlpha), 1 == this.wireframe && (n.wireframe = this.wireframe), this.wireframeLinewidth > 1 && (n.wireframeLinewidth = this.wireframeLinewidth), "round" !== this.wireframeLinecap && (n.wireframeLinecap = this.wireframeLinecap), "round" !== this.wireframeLinejoin && (n.wireframeLinejoin = this.wireframeLinejoin), 1 == this.morphTargets && (n.morphTargets = 1), 1 == this.morphNormals && (n.morphNormals = 1), 1 == this.skinning && (n.skinning = 1), 0 == this.visible && (n.visible = 0), 0 == this.toneMapped && (n.toneMapped = 0), "{}" !== JSON.stringify(this.userData) && (n.userData = this.userData), o && (i = e(t.textures), r = e(t.images), i.length > 0 && (n.textures = i), r.length > 0 && (n.images = r)), n + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + var e, n, i, r; + if (this.name = t.name, this.fog = t.fog, this.blending = t.blending, this.side = t.side, this.flatShading = t.flatShading, this.vertexColors = t.vertexColors, this.opacity = t.opacity, this.transparent = t.transparent, this.blendSrc = t.blendSrc, this.blendDst = t.blendDst, this.blendEquation = t.blendEquation, this.blendSrcAlpha = t.blendSrcAlpha, this.blendDstAlpha = t.blendDstAlpha, this.blendEquationAlpha = t.blendEquationAlpha, this.depthFunc = t.depthFunc, this.depthTest = t.depthTest, this.depthWrite = t.depthWrite, this.stencilWrite = t.stencilWrite, this.stencilWriteMask = t.stencilWriteMask, this.stencilFunc = t.stencilFunc, this.stencilRef = t.stencilRef, this.stencilFuncMask = t.stencilFuncMask, this.stencilFail = t.stencilFail, this.stencilZFail = t.stencilZFail, this.stencilZPass = t.stencilZPass, this.colorWrite = t.colorWrite, this.precision = t.precision, this.polygonOffset = t.polygonOffset, this.polygonOffsetFactor = t.polygonOffsetFactor, this.polygonOffsetUnits = t.polygonOffsetUnits, this.dithering = t.dithering, this.alphaTest = t.alphaTest, this.premultipliedAlpha = t.premultipliedAlpha, this.visible = t.visible, this.toneMapped = t.toneMapped, this.userData = JSON.parse(JSON.stringify(t.userData)), this.clipShadows = t.clipShadows, this.clipIntersection = t.clipIntersection, n = null, null !== (e = t.clippingPlanes)) + for (i = e.length, n = Array(i), r = 0; r !== i; ++r) n[r] = e[r].clone(); + return this.clippingPlanes = n, this.shadowSide = t.shadowSide, this + }, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + } + }), T.prototype = Object.create(S.prototype), T.prototype.constructor = T, T.prototype.isMeshBasicMaterial = 1, T.prototype.copy = function(t) { + return S.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.specularMap = t.specularMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.combine = t.combine, this.reflectivity = t.reflectivity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this + }, Object.defineProperty(A.prototype, "needsUpdate", { + set: function(t) { + 1 == t && this.version++ + } + }), Object.assign(A.prototype, { + isBufferAttribute: 1, + onUploadCallback: function() {}, + setDynamic: function(t) { + return this.dynamic = t, this + }, + copy: function(t) { + return this.name = t.name, this.array = new t.array.constructor(t.array), this.itemSize = t.itemSize, this.count = t.count, this.normalized = t.normalized, this.dynamic = t.dynamic, this + }, + copyAt: function(t, e, n) { + t *= this.itemSize, n *= e.itemSize; + for (var i = 0, r = this.itemSize; i < r; i++) this.array[t + i] = e.array[n + i]; + return this + }, + copyArray: function(t) { + return this.array.set(t), this + }, + copyColorsArray: function(t) { + var e, n, i, r = this.array, + o = 0; + for (e = 0, n = t.length; e < n; e++) void 0 === (i = t[e]) && (i = new x), r[o++] = i.r, r[o++] = i.g, r[o++] = i.b; + return this + }, + copyVector2sArray: function(t) { + var n, i, r, o = this.array, + a = 0; + for (n = 0, i = t.length; n < i; n++) void 0 === (r = t[n]) && (r = new e), o[a++] = r.x, o[a++] = r.y; + return this + }, + copyVector3sArray: function(t) { + var e, n, r, o = this.array, + a = 0; + for (e = 0, n = t.length; e < n; e++) void 0 === (r = t[e]) && (r = new i), o[a++] = r.x, o[a++] = r.y, o[a++] = r.z; + return this + }, + copyVector4sArray: function(t) { + var e, n, i, r = this.array, + o = 0; + for (e = 0, n = t.length; e < n; e++) void 0 === (i = t[e]) && (i = new a), r[o++] = i.x, r[o++] = i.y, r[o++] = i.z, r[o++] = i.w; + return this + }, + set: function(t, e) { + return void 0 === e && (e = 0), this.array.set(t, e), this + }, + getX: function(t) { + return this.array[t * this.itemSize] + }, + setX: function(t, e) { + return this.array[t * this.itemSize] = e, this + }, + getY: function(t) { + return this.array[t * this.itemSize + 1] + }, + setY: function(t, e) { + return this.array[t * this.itemSize + 1] = e, this + }, + getZ: function(t) { + return this.array[t * this.itemSize + 2] + }, + setZ: function(t, e) { + return this.array[t * this.itemSize + 2] = e, this + }, + getW: function(t) { + return this.array[t * this.itemSize + 3] + }, + setW: function(t, e) { + return this.array[t * this.itemSize + 3] = e, this + }, + setXY: function(t, e, n) { + return t *= this.itemSize, this.array[t + 0] = e, this.array[t + 1] = n, this + }, + setXYZ: function(t, e, n, i) { + return t *= this.itemSize, this.array[t + 0] = e, this.array[t + 1] = n, this.array[t + 2] = i, this + }, + setXYZW: function(t, e, n, i, r) { + return t *= this.itemSize, this.array[t + 0] = e, this.array[t + 1] = n, this.array[t + 2] = i, this.array[t + 3] = r, this + }, + onUpload: function(t) { + return this.onUploadCallback = t, this + }, + clone: function() { + return new this.constructor(this.array, this.itemSize).copy(this) + }, + toJSON: function() { + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: Array.prototype.slice.call(this.array), + normalized: this.normalized + } + } + }), L.prototype = Object.create(A.prototype), L.prototype.constructor = L, C.prototype = Object.create(A.prototype), C.prototype.constructor = C, P.prototype = Object.create(A.prototype), P.prototype.constructor = P, E.prototype = Object.create(A.prototype), E.prototype.constructor = E, N.prototype = Object.create(A.prototype), N.prototype.constructor = N, O.prototype = Object.create(A.prototype), O.prototype.constructor = O, D.prototype = Object.create(A.prototype), D.prototype.constructor = D, I.prototype = Object.create(A.prototype), I.prototype.constructor = I, z.prototype = Object.create(A.prototype), z.prototype.constructor = z, Object.assign(R.prototype, { + computeGroups: function(t) { + var e, n, i, r = [], + o = void 0, + a = t.faces; + for (n = 0; n < a.length; n++)(i = a[n]).materialIndex !== o && (o = i.materialIndex, void 0 !== e && (e.count = 3 * n - e.start, r.push(e)), e = { + start: 3 * n, + materialIndex: o + }); + void 0 !== e && (e.count = 3 * n - e.start, r.push(e)), this.groups = r + }, + fromGeometry: function(t) { + var n, i, r, o, a, s, c, l, u, h, p, d, f, m, g, v, y, x, b = t.faces, + _ = t.vertices, + w = t.faceVertexUvs, + M = w[0] && w[0].length > 0, + S = w[1] && w[1].length > 0, + T = t.morphTargets, + A = T.length; + if (A > 0) { + for (n = [], i = 0; i < A; i++) n[i] = { + name: T[i].name, + data: [] + }; + this.morphTargets.position = n + } + if ((o = (r = t.morphNormals).length) > 0) { + for (a = [], i = 0; i < o; i++) a[i] = { + name: r[i].name, + data: [] + }; + this.morphTargets.normal = a + } + for (s = t.skinIndices, c = t.skinWeights, l = s.length === _.length, u = c.length === _.length, _.length > 0 && b.length, i = 0; i < b.length; i++) { + for (h = b[i], this.vertices.push(_[h.a], _[h.b], _[h.c]), 3 === (p = h.vertexNormals).length ? this.normals.push(p[0], p[1], p[2]) : (d = h.normal, this.normals.push(d, d, d)), 3 === (f = h.vertexColors).length ? this.colors.push(f[0], f[1], f[2]) : (m = h.color, this.colors.push(m, m, m)), 1 == M && (void 0 !== (g = w[0][i]) ? this.uvs.push(g[0], g[1], g[2]) : this.uvs.push(new e, new e, new e)), 1 == S && (void 0 !== (g = w[1][i]) ? this.uvs2.push(g[0], g[1], g[2]) : this.uvs2.push(new e, new e, new e)), v = 0; v < A; v++) y = T[v].vertices, n[v].data.push(y[h.a], y[h.b], y[h.c]); + for (v = 0; v < o; v++) x = r[v].vertexNormals[i], a[v].data.push(x.a, x.b, x.c); + l && this.skinIndices.push(s[h.a], s[h.b], s[h.c]), u && this.skinWeights.push(c[h.a], c[h.b], c[h.c]) + } + return this.computeGroups(t), this.verticesNeedUpdate = t.verticesNeedUpdate, this.normalsNeedUpdate = t.normalsNeedUpdate, this.colorsNeedUpdate = t.colorsNeedUpdate, this.uvsNeedUpdate = t.uvsNeedUpdate, this.groupsNeedUpdate = t.groupsNeedUpdate, null !== t.boundingSphere && (this.boundingSphere = t.boundingSphere.clone()), null !== t.boundingBox && (this.boundingBox = t.boundingBox.clone()), this + } + }), pl = 1, dl = new l, fl = new p, ml = new i, gl = new f, vl = new f, yl = new i, k.prototype = Object.assign(Object.create(t.prototype), { + constructor: k, + isBufferGeometry: 1, + getIndex: function() { + return this.index + }, + setIndex: function(t) { + this.index = Array.isArray(t) ? new(F(t) > 65535 ? D : N)(t, 1) : t + }, + addAttribute: function(t, e, n) { + return e && e.isBufferAttribute || e && e.isInterleavedBufferAttribute ? "index" === t ? (this.setIndex(e), this) : this.setAttribute(t, e) : this.addAttribute(t, new A(e, n)) + }, + getAttribute: function(t) { + return this.attributes[t] + }, + setAttribute: function(t, e) { + return this.attributes[t] = e, this + }, + removeAttribute: function(t) { + return delete this.attributes[t], this + }, + addGroup: function(t, e, n) { + this.groups.push({ + start: t, + count: e, + materialIndex: void 0 !== n ? n : 0 + }) + }, + clearGroups: function() { + this.groups = [] + }, + setDrawRange: function(t, e) { + this.drawRange.start = t, this.drawRange.count = e + }, + applyMatrix: function(t) { + var e, n, i = this.attributes.position; + return void 0 !== i && (t.applyToBufferAttribute(i), i.needsUpdate = 1), void 0 !== (e = this.attributes.normal) && ((new r).getNormalMatrix(t).applyToBufferAttribute(e), e.needsUpdate = 1), void 0 !== (n = this.attributes.tangent) && ((new r).getNormalMatrix(t).applyToBufferAttribute(n), n.needsUpdate = 1), null !== this.boundingBox && this.computeBoundingBox(), null !== this.boundingSphere && this.computeBoundingSphere(), this + }, + rotateX: function(t) { + return dl.makeRotationX(t), this.applyMatrix(dl), this + }, + rotateY: function(t) { + return dl.makeRotationY(t), this.applyMatrix(dl), this + }, + rotateZ: function(t) { + return dl.makeRotationZ(t), this.applyMatrix(dl), this + }, + translate: function(t, e, n) { + return dl.makeTranslation(t, e, n), this.applyMatrix(dl), this + }, + scale: function(t, e, n) { + return dl.makeScale(t, e, n), this.applyMatrix(dl), this + }, + lookAt: function(t) { + return fl.lookAt(t), fl.updateMatrix(), this.applyMatrix(fl.matrix), this + }, + center: function() { + return this.computeBoundingBox(), this.boundingBox.getCenter(ml).negate(), this.translate(ml.x, ml.y, ml.z), this + }, + setFromObject: function(t) { + var e, n, i, r = t.geometry; + return t.isPoints || t.isLine ? (e = new I(3 * r.vertices.length, 3), n = new I(3 * r.colors.length, 3), this.addAttribute("position", e.copyVector3sArray(r.vertices)), this.addAttribute("color", n.copyColorsArray(r.colors)), r.lineDistances && r.lineDistances.length === r.vertices.length && (i = new I(r.lineDistances.length, 1), this.addAttribute("lineDistance", i.copyArray(r.lineDistances))), null !== r.boundingSphere && (this.boundingSphere = r.boundingSphere.clone()), null !== r.boundingBox && (this.boundingBox = r.boundingBox.clone())) : t.isMesh && r && r.isGeometry && this.fromGeometry(r), this + }, + setFromPoints: function(t) { + var e, n, i, r = []; + for (e = 0, n = t.length; e < n; e++) i = t[e], r.push(i.x, i.y, i.z || 0); + return this.addAttribute("position", new I(r, 3)), this + }, + updateFromObject: function(t) { + var e, n, i = t.geometry; + if (t.isMesh) { + if (e = i.__directGeometry, 1 == i.elementsNeedUpdate && (e = void 0, i.elementsNeedUpdate = 0), void 0 === e) return this.fromGeometry(i); + e.verticesNeedUpdate = i.verticesNeedUpdate, e.normalsNeedUpdate = i.normalsNeedUpdate, e.colorsNeedUpdate = i.colorsNeedUpdate, e.uvsNeedUpdate = i.uvsNeedUpdate, e.groupsNeedUpdate = i.groupsNeedUpdate, i.verticesNeedUpdate = 0, i.normalsNeedUpdate = 0, i.colorsNeedUpdate = 0, i.uvsNeedUpdate = 0, i.groupsNeedUpdate = 0, i = e + } + return 1 == i.verticesNeedUpdate && (void 0 !== (n = this.attributes.position) && (n.copyVector3sArray(i.vertices), n.needsUpdate = 1), i.verticesNeedUpdate = 0), 1 == i.normalsNeedUpdate && (void 0 !== (n = this.attributes.normal) && (n.copyVector3sArray(i.normals), n.needsUpdate = 1), i.normalsNeedUpdate = 0), 1 == i.colorsNeedUpdate && (void 0 !== (n = this.attributes.color) && (n.copyColorsArray(i.colors), n.needsUpdate = 1), i.colorsNeedUpdate = 0), i.uvsNeedUpdate && (void 0 !== (n = this.attributes.uv) && (n.copyVector2sArray(i.uvs), n.needsUpdate = 1), i.uvsNeedUpdate = 0), i.lineDistancesNeedUpdate && (void 0 !== (n = this.attributes.lineDistance) && (n.copyArray(i.lineDistances), n.needsUpdate = 1), i.lineDistancesNeedUpdate = 0), i.groupsNeedUpdate && (i.computeGroups(t.geometry), this.groups = i.groups, i.groupsNeedUpdate = 0), this + }, + fromGeometry: function(t) { + return t.__directGeometry = (new R).fromGeometry(t), this.fromDirectGeometry(t.__directGeometry) + }, + fromDirectGeometry: function(t) { + var e, n, i, r, o, a, s, c, l, u, h, p, d, f = new Float32Array(3 * t.vertices.length); + for (o in this.addAttribute("position", new A(f, 3).copyVector3sArray(t.vertices)), t.normals.length > 0 && (e = new Float32Array(3 * t.normals.length), this.addAttribute("normal", new A(e, 3).copyVector3sArray(t.normals))), t.colors.length > 0 && (n = new Float32Array(3 * t.colors.length), this.addAttribute("color", new A(n, 3).copyColorsArray(t.colors))), t.uvs.length > 0 && (i = new Float32Array(2 * t.uvs.length), this.addAttribute("uv", new A(i, 2).copyVector2sArray(t.uvs))), t.uvs2.length > 0 && (r = new Float32Array(2 * t.uvs2.length), this.addAttribute("uv2", new A(r, 2).copyVector2sArray(t.uvs2))), this.groups = t.groups, t.morphTargets) { + for (a = [], c = 0, l = (s = t.morphTargets[o]).length; c < l; c++)(h = new I(3 * (u = s[c]).data.length, 3)).name = u.name, a.push(h.copyVector3sArray(u.data)); + this.morphAttributes[o] = a + } + return t.skinIndices.length > 0 && (p = new I(4 * t.skinIndices.length, 4), this.addAttribute("skinIndex", p.copyVector4sArray(t.skinIndices))), t.skinWeights.length > 0 && (d = new I(4 * t.skinWeights.length, 4), this.addAttribute("skinWeight", d.copyVector4sArray(t.skinWeights))), null !== t.boundingSphere && (this.boundingSphere = t.boundingSphere.clone()), null !== t.boundingBox && (this.boundingBox = t.boundingBox.clone()), this + }, + computeBoundingBox: function() { + var t, e, n, i, r; + if (null === this.boundingBox && (this.boundingBox = new f), t = this.attributes.position, e = this.morphAttributes.position, void 0 !== t) { + if (this.boundingBox.setFromBufferAttribute(t), e) + for (n = 0, i = e.length; n < i; n++) r = e[n], gl.setFromBufferAttribute(r), this.boundingBox.expandByPoint(gl.min), this.boundingBox.expandByPoint(gl.max) + } else this.boundingBox.makeEmpty(); + isNaN(this.boundingBox.min.x) || isNaN(this.boundingBox.min.y) || this.boundingBox.min.z + }, + computeBoundingSphere: function() { + var t, e, n, i, r, o, a, s, c; + if (null === this.boundingSphere && (this.boundingSphere = new g), t = this.attributes.position, e = this.morphAttributes.position, t) { + if (n = this.boundingSphere.center, gl.setFromBufferAttribute(t), e) + for (i = 0, r = e.length; i < r; i++) o = e[i], vl.setFromBufferAttribute(o), gl.expandByPoint(vl.min), gl.expandByPoint(vl.max); + for (gl.getCenter(n), a = 0, i = 0, r = t.count; i < r; i++) yl.fromBufferAttribute(t, i), a = Math.max(a, n.distanceToSquared(yl)); + if (e) + for (i = 0, r = e.length; i < r; i++) + for (s = 0, c = (o = e[i]).count; s < c; s++) yl.fromBufferAttribute(o, s), a = Math.max(a, n.distanceToSquared(yl)); + this.boundingSphere.radius = Math.sqrt(a), this.boundingSphere.radius + } + }, + computeFaceNormals: function() {}, + computeVertexNormals: function() { + var t, e, n, r, o, a, s, c, l, u, h, p, d, f, m = this.index, + g = this.attributes; + if (g.position) { + if (t = g.position.array, void 0 === g.normal) this.addAttribute("normal", new A(new Float32Array(t.length), 3)); + else + for (n = 0, r = (e = g.normal.array).length; n < r; n++) e[n] = 0; + if (o = g.normal.array, l = new i, u = new i, h = new i, p = new i, d = new i, m) + for (f = m.array, n = 0, r = m.count; n < r; n += 3) a = 3 * f[n + 0], s = 3 * f[n + 1], c = 3 * f[n + 2], l.fromArray(t, a), u.fromArray(t, s), h.fromArray(t, c), p.subVectors(h, u), d.subVectors(l, u), p.cross(d), o[a] += p.x, o[a + 1] += p.y, o[a + 2] += p.z, o[s] += p.x, o[s + 1] += p.y, o[s + 2] += p.z, o[c] += p.x, o[c + 1] += p.y, o[c + 2] += p.z; + else + for (n = 0, r = t.length; n < r; n += 9) l.fromArray(t, n), u.fromArray(t, n + 3), h.fromArray(t, n + 6), p.subVectors(h, u), d.subVectors(l, u), p.cross(d), o[n] = p.x, o[n + 1] = p.y, o[n + 2] = p.z, o[n + 3] = p.x, o[n + 4] = p.y, o[n + 5] = p.z, o[n + 6] = p.x, o[n + 7] = p.y, o[n + 8] = p.z; + this.normalizeNormals(), g.normal.needsUpdate = 1 + } + }, + merge: function(t, e) { + var n, i, r, o, a, s, c, l, u; + if (t && t.isBufferGeometry) { + for (i in void 0 === e && (e = 0), n = this.attributes) + if (void 0 !== t.attributes[i]) + for (r = n[i].array, a = (o = t.attributes[i]).array, s = o.itemSize * e, c = Math.min(a.length, r.length - s), l = 0, u = s; l < c; l++, u++) r[u] = a[l]; + return this + } + }, + normalizeNormals: function() { + var t, e, n = this.attributes.normal; + for (t = 0, e = n.count; t < e; t++) yl.x = n.getX(t), yl.y = n.getY(t), yl.z = n.getZ(t), yl.normalize(), n.setXYZ(t, yl.x, yl.y, yl.z) + }, + toNonIndexed: function() { + function t(t, e) { + var n, i, r, o = t.array, + a = t.itemSize, + s = new o.constructor(e.length * a), + c = 0, + l = 0; + for (n = 0, i = e.length; n < i; n++) + for (c = e[n] * a, r = 0; r < a; r++) s[l++] = o[c++]; + return new A(s, a) + } + var e, n, i, r, o, a, s, c, l, u, h, p, d; + if (null === this.index) return this; + for (r in e = new k, n = this.index.array, i = this.attributes) o = t(i[r], n), e.addAttribute(r, o); + for (r in a = this.morphAttributes) { + for (s = [], l = 0, u = (c = a[r]).length; l < u; l++) o = t(c[l], n), s.push(o); + e.morphAttributes[r] = s + } + for (l = 0, p = (h = this.groups).length; l < p; l++) d = h[l], e.addGroup(d.start, d.count, d.materialIndex); + return e + }, + toJSON: function() { + var t, e, n, i, r, o, a, s, c, l, u, h, p, d, f = { + metadata: { + version: 4.5, + type: "BufferGeometry", + generator: "BufferGeometry.toJSON" + } + }; + if (f.uuid = this.uuid, f.type = this.type, "" !== this.name && (f.name = this.name), Object.keys(this.userData).length > 0 && (f.userData = this.userData), void 0 !== this.parameters) { + for (e in t = this.parameters) void 0 !== t[e] && (f[e] = t[e]); + return f + } + for (e in f.data = { + attributes: {} + }, null !== (n = this.index) && (f.data.index = { + type: n.array.constructor.name, + array: Array.prototype.slice.call(n.array) + }), i = this.attributes) o = (r = i[e]).toJSON(), "" !== r.name && (o.name = r.name), f.data.attributes[e] = o; + for (e in a = {}, s = 0, this.morphAttributes) { + for (l = [], u = 0, h = (c = this.morphAttributes[e]).length; u < h; u++) o = (r = c[u]).toJSON(), "" !== r.name && (o.name = r.name), l.push(o); + l.length > 0 && (a[e] = l, s = 1) + } + return s && (f.data.morphAttributes = a), (p = this.groups).length > 0 && (f.data.groups = JSON.parse(JSON.stringify(p))), null !== (d = this.boundingSphere) && (f.data.boundingSphere = { + center: d.center.toArray(), + radius: d.radius + }), f + }, + clone: function() { + return (new k).copy(this) + }, + copy: function(t) { + var e, n, i, r, o, a, s, c, l, u, h, p, d; + for (e in this.index = null, this.attributes = {}, this.morphAttributes = {}, this.groups = [], this.boundingBox = null, this.boundingSphere = null, this.name = t.name, null !== (r = t.index) && this.setIndex(r.clone()), o = t.attributes) a = o[e], this.addAttribute(e, a.clone()); + for (e in s = t.morphAttributes) { + for (c = [], n = 0, i = (l = s[e]).length; n < i; n++) c.push(l[n].clone()); + this.morphAttributes[e] = c + } + for (n = 0, i = (u = t.groups).length; n < i; n++) h = u[n], this.addGroup(h.start, h.count, h.materialIndex); + return null !== (p = t.boundingBox) && (this.boundingBox = p.clone()), null !== (d = t.boundingSphere) && (this.boundingSphere = d.clone()), this.drawRange.start = t.drawRange.start, this.drawRange.count = t.drawRange.count, this.userData = t.userData, this + }, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + } + }), xl = new l, bl = new v, _l = new g, wl = new i, Ml = new i, Sl = new i, Tl = new i, Al = new i, Ll = new i, Cl = new i, Pl = new i, El = new i, Nl = new e, Ol = new e, Dl = new e, Il = new i, zl = new i, B.prototype = Object.assign(Object.create(p.prototype), { + constructor: B, + isMesh: 1, + setDrawMode: function(t) { + this.drawMode = t + }, + copy: function(t) { + return p.prototype.copy.call(this, t), this.drawMode = t.drawMode, void 0 !== t.morphTargetInfluences && (this.morphTargetInfluences = t.morphTargetInfluences.slice()), void 0 !== t.morphTargetDictionary && (this.morphTargetDictionary = Object.assign({}, t.morphTargetDictionary)), this + }, + updateMorphTargets: function() { + var t, e, n, i, r, o, a, s = this.geometry; + if (s.isBufferGeometry) { + if (i = s.morphAttributes, (r = Object.keys(i)).length > 0 && void 0 !== (o = i[r[0]])) + for (this.morphTargetInfluences = [], this.morphTargetDictionary = {}, t = 0, e = o.length; t < e; t++) n = o[t].name || t + "", this.morphTargetInfluences.push(0), this.morphTargetDictionary[n] = t + } else void 0 !== (a = s.morphTargets) && a.length + }, + raycast: function(t, n) { + var i, r, o, a, s, c, l, u, h, p, d, f, m, g, v, x, b, _, w, M, S, T, A, L, C, P, E, N, O, D, I = this.geometry, + z = this.material, + R = this.matrixWorld; + if (void 0 !== z && (null === I.boundingSphere && I.computeBoundingSphere(), _l.copy(I.boundingSphere), _l.applyMatrix4(R), 0 != t.ray.intersectsSphere(_l) && (xl.getInverse(R), bl.copy(t.ray).applyMatrix4(xl), null === I.boundingBox || 0 != bl.intersectsBox(I.boundingBox)))) + if (I.isBufferGeometry) { + if (s = I.index, c = I.attributes.position, l = I.morphAttributes.position, u = I.attributes.uv, h = I.attributes.uv2, p = I.groups, d = I.drawRange, null !== s) + if (Array.isArray(z)) + for (f = 0, g = p.length; f < g; f++) + for (b = z[(x = p[f]).materialIndex], m = Math.max(x.start, d.start), v = Math.min(x.start + x.count, d.start + d.count); m < v; m += 3) r = s.getX(m), o = s.getX(m + 1), a = s.getX(m + 2), (i = j(this, b, t, bl, c, l, u, h, r, o, a)) && (i.faceIndex = Math.floor(m / 3), i.face.materialIndex = x.materialIndex, n.push(i)); + else + for (f = Math.max(0, d.start), g = Math.min(s.count, d.start + d.count); f < g; f += 3) r = s.getX(f), o = s.getX(f + 1), a = s.getX(f + 2), (i = j(this, z, t, bl, c, l, u, h, r, o, a)) && (i.faceIndex = Math.floor(f / 3), n.push(i)); + else if (void 0 !== c) + if (Array.isArray(z)) + for (f = 0, g = p.length; f < g; f++) + for (b = z[(x = p[f]).materialIndex], m = Math.max(x.start, d.start), v = Math.min(x.start + x.count, d.start + d.count); m < v; m += 3)(i = j(this, b, t, bl, c, l, u, h, r = m, o = m + 1, a = m + 2)) && (i.faceIndex = Math.floor(m / 3), i.face.materialIndex = x.materialIndex, n.push(i)); + else + for (f = Math.max(0, d.start), g = Math.min(c.count, d.start + d.count); f < g; f += 3)(i = j(this, z, t, bl, c, l, u, h, r = f, o = f + 1, a = f + 2)) && (i.faceIndex = Math.floor(f / 3), n.push(i)) + } else if (I.isGeometry) + for (S = Array.isArray(z), T = I.vertices, A = I.faces, (C = I.faceVertexUvs[0]).length > 0 && (L = C), P = 0, E = A.length; P < E; P++) N = A[P], void 0 !== (O = S ? z[N.materialIndex] : z) && (_ = T[N.a], w = T[N.b], M = T[N.c], (i = U(this, O, t, bl, _, w, M, Il)) && (L && L[P] && (D = L[P], Nl.copy(D[0]), Ol.copy(D[1]), Dl.copy(D[2]), i.uv = y.getUV(Il, _, w, M, Nl, Ol, Dl, new e)), i.face = N, i.faceIndex = P, n.push(i))) + }, + clone: function() { + return new this.constructor(this.geometry, this.material).copy(this) + } + }), Rl = 0, Fl = new l, kl = new p, Bl = new i, V.prototype = Object.assign(Object.create(t.prototype), { + constructor: V, + isGeometry: 1, + applyMatrix: function(t) { + var e, n, i, o, a, s = (new r).getNormalMatrix(t); + for (e = 0, n = this.vertices.length; e < n; e++) this.vertices[e].applyMatrix4(t); + for (e = 0, n = this.faces.length; e < n; e++) + for ((i = this.faces[e]).normal.applyMatrix3(s).normalize(), o = 0, a = i.vertexNormals.length; o < a; o++) i.vertexNormals[o].applyMatrix3(s).normalize(); + return null !== this.boundingBox && this.computeBoundingBox(), null !== this.boundingSphere && this.computeBoundingSphere(), this.verticesNeedUpdate = 1, this.normalsNeedUpdate = 1, this + }, + rotateX: function(t) { + return Fl.makeRotationX(t), this.applyMatrix(Fl), this + }, + rotateY: function(t) { + return Fl.makeRotationY(t), this.applyMatrix(Fl), this + }, + rotateZ: function(t) { + return Fl.makeRotationZ(t), this.applyMatrix(Fl), this + }, + translate: function(t, e, n) { + return Fl.makeTranslation(t, e, n), this.applyMatrix(Fl), this + }, + scale: function(t, e, n) { + return Fl.makeScale(t, e, n), this.applyMatrix(Fl), this + }, + lookAt: function(t) { + return kl.lookAt(t), kl.updateMatrix(), this.applyMatrix(kl.matrix), this + }, + fromBufferGeometry: function(t) { + function n(t, n, r, l) { + var u = void 0 === a ? [] : [m.colors[t].clone(), m.colors[n].clone(), m.colors[r].clone()], + h = new M(t, n, r, void 0 === o ? [] : [(new i).fromArray(o, 3 * t), (new i).fromArray(o, 3 * n), (new i).fromArray(o, 3 * r)], u, l); + m.faces.push(h), void 0 !== s && m.faceVertexUvs[0].push([(new e).fromArray(s, 2 * t), (new e).fromArray(s, 2 * n), (new e).fromArray(s, 2 * r)]), void 0 !== c && m.faceVertexUvs[1].push([(new e).fromArray(c, 2 * t), (new e).fromArray(c, 2 * n), (new e).fromArray(c, 2 * r)]) + } + var r, o, a, s, c, l, u, h, p, d, f, m = this, + g = null !== t.index ? t.index.array : void 0, + v = t.attributes; + if (void 0 === v.position) return this; + for (r = v.position.array, o = void 0 !== v.normal ? v.normal.array : void 0, a = void 0 !== v.color ? v.color.array : void 0, s = void 0 !== v.uv ? v.uv.array : void 0, void 0 !== (c = void 0 !== v.uv2 ? v.uv2.array : void 0) && (this.faceVertexUvs[1] = []), l = 0; l < r.length; l += 3) m.vertices.push((new i).fromArray(r, l)), void 0 !== a && m.colors.push((new x).fromArray(a, l)); + if ((u = t.groups).length > 0) + for (l = 0; l < u.length; l++) + for (d = p = (h = u[l]).start, f = p + h.count; d < f; d += 3) void 0 !== g ? n(g[d], g[d + 1], g[d + 2], h.materialIndex) : n(d, d + 1, d + 2, h.materialIndex); + else if (void 0 !== g) + for (l = 0; l < g.length; l += 3) n(g[l], g[l + 1], g[l + 2]); + else + for (l = 0; l < r.length / 3; l += 3) n(l, l + 1, l + 2); + return this.computeFaceNormals(), null !== t.boundingBox && (this.boundingBox = t.boundingBox.clone()), null !== t.boundingSphere && (this.boundingSphere = t.boundingSphere.clone()), this + }, + center: function() { + return this.computeBoundingBox(), this.boundingBox.getCenter(Bl).negate(), this.translate(Bl.x, Bl.y, Bl.z), this + }, + normalize: function() { + var t, e, n, i; + return this.computeBoundingSphere(), t = this.boundingSphere.center, n = 0 === (e = this.boundingSphere.radius) ? 1 : 1 / e, (i = new l).set(n, 0, 0, -n * t.x, 0, n, 0, -n * t.y, 0, 0, n, -n * t.z, 0, 0, 0, 1), this.applyMatrix(i), this + }, + computeFaceNormals: function() { + var t, e, n, r, o, a, s = new i, + c = new i; + for (t = 0, e = this.faces.length; t < e; t++) n = this.faces[t], r = this.vertices[n.a], o = this.vertices[n.b], a = this.vertices[n.c], s.subVectors(a, o), c.subVectors(r, o), s.cross(c), s.normalize(), n.normal.copy(s) + }, + computeVertexNormals: function(t) { + var e, n, r, o, a, s, c, l, u, h, p, d; + for (void 0 === t && (t = 1), s = Array(this.vertices.length), e = 0, n = this.vertices.length; e < n; e++) s[e] = new i; + if (t) + for (h = new i, p = new i, r = 0, o = this.faces.length; r < o; r++) a = this.faces[r], c = this.vertices[a.a], l = this.vertices[a.b], u = this.vertices[a.c], h.subVectors(u, l), p.subVectors(c, l), h.cross(p), s[a.a].add(h), s[a.b].add(h), s[a.c].add(h); + else + for (this.computeFaceNormals(), r = 0, o = this.faces.length; r < o; r++) s[(a = this.faces[r]).a].add(a.normal), s[a.b].add(a.normal), s[a.c].add(a.normal); + for (e = 0, n = this.vertices.length; e < n; e++) s[e].normalize(); + for (r = 0, o = this.faces.length; r < o; r++) 3 === (d = (a = this.faces[r]).vertexNormals).length ? (d[0].copy(s[a.a]), d[1].copy(s[a.b]), d[2].copy(s[a.c])) : (d[0] = s[a.a].clone(), d[1] = s[a.b].clone(), d[2] = s[a.c].clone()); + this.faces.length > 0 && (this.normalsNeedUpdate = 1) + }, + computeFlatVertexNormals: function() { + var t, e, n, i; + for (this.computeFaceNormals(), t = 0, e = this.faces.length; t < e; t++) 3 === (i = (n = this.faces[t]).vertexNormals).length ? (i[0].copy(n.normal), i[1].copy(n.normal), i[2].copy(n.normal)) : (i[0] = n.normal.clone(), i[1] = n.normal.clone(), i[2] = n.normal.clone()); + this.faces.length > 0 && (this.normalsNeedUpdate = 1) + }, + computeMorphNormals: function() { + var t, e, n, r, o, a, s, c, l, u, h; + for (n = 0, r = this.faces.length; n < r; n++) + for ((o = this.faces[n]).__originalFaceNormal ? o.__originalFaceNormal.copy(o.normal) : o.__originalFaceNormal = o.normal.clone(), o.__originalVertexNormals || (o.__originalVertexNormals = []), t = 0, e = o.vertexNormals.length; t < e; t++) o.__originalVertexNormals[t] ? o.__originalVertexNormals[t].copy(o.vertexNormals[t]) : o.__originalVertexNormals[t] = o.vertexNormals[t].clone(); + for ((a = new V).faces = this.faces, t = 0, e = this.morphTargets.length; t < e; t++) { + if (!this.morphNormals[t]) + for (this.morphNormals[t] = {}, this.morphNormals[t].faceNormals = [], this.morphNormals[t].vertexNormals = [], s = this.morphNormals[t].faceNormals, c = this.morphNormals[t].vertexNormals, n = 0, r = this.faces.length; n < r; n++) l = new i, u = { + a: new i, + b: new i, + c: new i + }, s.push(l), c.push(u); + for (h = this.morphNormals[t], a.vertices = this.morphTargets[t].vertices, a.computeFaceNormals(), a.computeVertexNormals(), n = 0, r = this.faces.length; n < r; n++) o = this.faces[n], l = h.faceNormals[n], u = h.vertexNormals[n], l.copy(o.normal), u.a.copy(o.vertexNormals[0]), u.b.copy(o.vertexNormals[1]), u.c.copy(o.vertexNormals[2]) + } + for (n = 0, r = this.faces.length; n < r; n++)(o = this.faces[n]).normal = o.__originalFaceNormal, o.vertexNormals = o.__originalVertexNormals + }, + computeBoundingBox: function() { + null === this.boundingBox && (this.boundingBox = new f), this.boundingBox.setFromPoints(this.vertices) + }, + computeBoundingSphere: function() { + null === this.boundingSphere && (this.boundingSphere = new g), this.boundingSphere.setFromPoints(this.vertices) + }, + merge: function(t, e, n) { + var i, o, a, s, c, l, u, h, p, d, f, m, g, v, y, x, b, _, w, S, T, A, L, C; + if (t && t.isGeometry) { + for (o = this.vertices.length, a = this.vertices, s = t.vertices, c = this.faces, l = t.faces, u = this.colors, h = t.colors, void 0 === n && (n = 0), void 0 !== e && (i = (new r).getNormalMatrix(e)), p = 0, d = s.length; p < d; p++) f = s[p].clone(), void 0 !== e && f.applyMatrix4(e), a.push(f); + for (p = 0, d = h.length; p < d; p++) u.push(h[p].clone()); + for (p = 0, d = l.length; p < d; p++) { + for (x = (m = l[p]).vertexNormals, b = m.vertexColors, (g = new M(m.a + o, m.b + o, m.c + o)).normal.copy(m.normal), void 0 !== i && g.normal.applyMatrix3(i).normalize(), _ = 0, w = x.length; _ < w; _++) v = x[_].clone(), void 0 !== i && v.applyMatrix3(i).normalize(), g.vertexNormals.push(v); + for (g.color.copy(m.color), _ = 0, w = b.length; _ < w; _++) y = b[_], g.vertexColors.push(y.clone()); + g.materialIndex = m.materialIndex + n, c.push(g) + } + for (p = 0, d = t.faceVertexUvs.length; p < d; p++) + for (S = t.faceVertexUvs[p], void 0 === this.faceVertexUvs[p] && (this.faceVertexUvs[p] = []), _ = 0, w = S.length; _ < w; _++) { + for (A = [], L = 0, C = (T = S[_]).length; L < C; L++) A.push(T[L].clone()); + this.faceVertexUvs[p].push(A) + } + } + }, + mergeMesh: function(t) { + t && t.isMesh && (t.matrixAutoUpdate && t.updateMatrix(), this.merge(t.geometry, t.matrix)) + }, + mergeVertices: function() { + var t, e, n, i, r, o, a, s, c, l, u, h, p = {}, + d = [], + f = []; + for (n = 0, i = this.vertices.length; n < i; n++) t = this.vertices[n], void 0 === p[e = Math.round(1e4 * t.x) + "_" + Math.round(1e4 * t.y) + "_" + Math.round(1e4 * t.z)] ? (p[e] = n, d.push(this.vertices[n]), f[n] = d.length - 1) : f[n] = f[p[e]]; + for (c = [], n = 0, i = this.faces.length; n < i; n++) + for ((r = this.faces[n]).a = f[r.a], r.b = f[r.b], r.c = f[r.c], o = [r.a, r.b, r.c], l = 0; l < 3; l++) + if (o[l] === o[(l + 1) % 3]) { + c.push(n); + break + } + for (n = c.length - 1; n >= 0; n--) + for (u = c[n], this.faces.splice(u, 1), a = 0, s = this.faceVertexUvs.length; a < s; a++) this.faceVertexUvs[a].splice(u, 1); + return h = this.vertices.length - d.length, this.vertices = d, h + }, + setFromPoints: function(t) { + var e, n, r; + for (this.vertices = [], e = 0, n = t.length; e < n; e++) r = t[e], this.vertices.push(new i(r.x, r.y, r.z || 0)); + return this + }, + sortFacesByMaterialIndex: function() { + var t, e, n, i, r, o, a = this.faces, + s = a.length; + for (t = 0; t < s; t++) a[t]._id = t; + for (a.sort(function(t, e) { + return t.materialIndex - e.materialIndex + }), e = this.faceVertexUvs[0], n = this.faceVertexUvs[1], e && e.length === s && (i = []), n && n.length === s && (r = []), t = 0; t < s; t++) o = a[t]._id, i && i.push(e[o]), r && r.push(n[o]); + i && (this.faceVertexUvs[0] = i), r && (this.faceVertexUvs[1] = r) + }, + toJSON: function() { + function t(t, e, n) { + return n ? t | 1 << e : t & ~(1 << e) + } + + function e(t) { + var e = t.x.toString() + t.y.toString() + t.z.toString(); + return void 0 !== h[e] ? h[e] : (h[e] = u.length / 3, u.push(t.x, t.y, t.z), h[e]) + } + + function n(t) { + var e = t.r.toString() + t.g.toString() + t.b.toString(); + return void 0 !== d[e] ? d[e] : (d[e] = p.length, p.push(t.getHex()), d[e]) + } + + function i(t) { + var e = t.x.toString() + t.y.toString(); + return void 0 !== m[e] ? m[e] : (m[e] = f.length / 2, f.push(t.x, t.y), m[e]) + } + var r, o, a, s, c, l, u, h, p, d, f, m, g, v, y, x, b, _, w, M, S, T, A = { + metadata: { + version: 4.5, + type: "Geometry", + generator: "Geometry.toJSON" + } + }; + if (A.uuid = this.uuid, A.type = this.type, "" !== this.name && (A.name = this.name), void 0 !== this.parameters) { + for (o in r = this.parameters) void 0 !== r[o] && (A[o] = r[o]); + return A + } + for (a = [], s = 0; s < this.vertices.length; s++) c = this.vertices[s], a.push(c.x, c.y, c.z); + for (l = [], u = [], h = {}, p = [], d = {}, f = [], m = {}, s = 0; s < this.faces.length; s++) g = this.faces[s], 1, 0, v = void 0 !== this.faceVertexUvs[0][s], y = g.normal.length() > 0, x = g.vertexNormals.length > 0, b = 1 !== g.color.r || 1 !== g.color.g || 1 !== g.color.b, _ = g.vertexColors.length > 0, w = t(w = 0, 0, 0), w = t(w, 1, 1), w = t(w, 2, 0), w = t(w, 3, v), w = t(w, 4, y), w = t(w, 5, x), w = t(w, 6, b), w = t(w, 7, _), l.push(w), l.push(g.a, g.b, g.c), l.push(g.materialIndex), v && (M = this.faceVertexUvs[0][s], l.push(i(M[0]), i(M[1]), i(M[2]))), y && l.push(e(g.normal)), x && (S = g.vertexNormals, l.push(e(S[0]), e(S[1]), e(S[2]))), b && l.push(n(g.color)), _ && (T = g.vertexColors, l.push(n(T[0]), n(T[1]), n(T[2]))); + return A.data = {}, A.data.vertices = a, A.data.normals = u, p.length > 0 && (A.data.colors = p), f.length > 0 && (A.data.uvs = [f]), A.data.faces = l, A + }, + clone: function() { + return (new V).copy(this) + }, + copy: function(t) { + var e, n, i, r, o, a, s, c, l, u, h, p, d, f, m, g, v, y, x, b, _, w, M, S; + for (this.vertices = [], this.colors = [], this.faces = [], this.faceVertexUvs = [ + [] + ], this.morphTargets = [], this.morphNormals = [], this.skinWeights = [], this.skinIndices = [], this.lineDistances = [], this.boundingBox = null, this.boundingSphere = null, this.name = t.name, e = 0, n = (s = t.vertices).length; e < n; e++) this.vertices.push(s[e].clone()); + for (e = 0, n = (c = t.colors).length; e < n; e++) this.colors.push(c[e].clone()); + for (e = 0, n = (l = t.faces).length; e < n; e++) this.faces.push(l[e].clone()); + for (e = 0, n = t.faceVertexUvs.length; e < n; e++) + for (u = t.faceVertexUvs[e], void 0 === this.faceVertexUvs[e] && (this.faceVertexUvs[e] = []), i = 0, r = u.length; i < r; i++) { + for (p = [], o = 0, a = (h = u[i]).length; o < a; o++) d = h[o], p.push(d.clone()); + this.faceVertexUvs[e].push(p) + } + for (e = 0, n = (f = t.morphTargets).length; e < n; e++) { + if ((m = {}).name = f[e].name, void 0 !== f[e].vertices) + for (m.vertices = [], i = 0, r = f[e].vertices.length; i < r; i++) m.vertices.push(f[e].vertices[i].clone()); + if (void 0 !== f[e].normals) + for (m.normals = [], i = 0, r = f[e].normals.length; i < r; i++) m.normals.push(f[e].normals[i].clone()); + this.morphTargets.push(m) + } + for (e = 0, n = (g = t.morphNormals).length; e < n; e++) { + if (v = {}, void 0 !== g[e].vertexNormals) + for (v.vertexNormals = [], i = 0, r = g[e].vertexNormals.length; i < r; i++) y = g[e].vertexNormals[i], (x = {}).a = y.a.clone(), x.b = y.b.clone(), x.c = y.c.clone(), v.vertexNormals.push(x); + if (void 0 !== g[e].faceNormals) + for (v.faceNormals = [], i = 0, r = g[e].faceNormals.length; i < r; i++) v.faceNormals.push(g[e].faceNormals[i].clone()); + this.morphNormals.push(v) + } + for (e = 0, n = (b = t.skinWeights).length; e < n; e++) this.skinWeights.push(b[e].clone()); + for (e = 0, n = (_ = t.skinIndices).length; e < n; e++) this.skinIndices.push(_[e].clone()); + for (e = 0, n = (w = t.lineDistances).length; e < n; e++) this.lineDistances.push(w[e]); + return null !== (M = t.boundingBox) && (this.boundingBox = M.clone()), null !== (S = t.boundingSphere) && (this.boundingSphere = S.clone()), this.elementsNeedUpdate = t.elementsNeedUpdate, this.verticesNeedUpdate = t.verticesNeedUpdate, this.uvsNeedUpdate = t.uvsNeedUpdate, this.normalsNeedUpdate = t.normalsNeedUpdate, this.colorsNeedUpdate = t.colorsNeedUpdate, this.lineDistancesNeedUpdate = t.lineDistancesNeedUpdate, this.groupsNeedUpdate = t.groupsNeedUpdate, this + }, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + } + }); + class up extends k { + constructor(t, e, n, r, o, a) { + function s(t, e, n, r, o, a, s, m, g, v, y) { + var x, b, _, w, M, S, T, A, L = a / g, + C = s / v, + P = a / 2, + E = s / 2, + N = m / 2, + O = g + 1, + D = v + 1, + I = 0, + z = 0, + R = new i; + for (b = 0; b < D; b++) + for (_ = b * C - E, x = 0; x < O; x++) w = x * L - P, R[t] = w * r, R[e] = _ * o, R[n] = N, u.push(R.x, R.y, R.z), R[t] = 0, R[e] = 0, R[n] = m > 0 ? 1 : -1, h.push(R.x, R.y, R.z), p.push(x / g), p.push(1 - b / v), I += 1; + for (b = 0; b < v; b++) + for (x = 0; x < g; x++) M = d + x + O * b, S = d + x + O * (b + 1), T = d + (x + 1) + O * (b + 1), A = d + (x + 1) + O * b, l.push(M, S, A), l.push(S, T, A), z += 6; + c.addGroup(f, z, y), f += z, d += I + } + var c, l, u, h, p, d, f; + super(), this.type = "BoxBufferGeometry", this.parameters = { + width: t, + height: e, + depth: n, + widthSegments: r, + heightSegments: o, + depthSegments: a + }, c = this, t = t || 1, e = e || 1, n = n || 1, r = Math.floor(r) || 1, o = Math.floor(o) || 1, l = [], u = [], h = [], p = [], d = 0, f = 0, s("z", "y", "x", -1, -1, n, e, t, a = Math.floor(a) || 1, o, 0), s("z", "y", "x", 1, -1, n, e, -t, a, o, 1), s("x", "z", "y", 1, 1, t, n, e, r, a, 2), s("x", "z", "y", 1, -1, t, n, -e, r, a, 3), s("x", "y", "z", 1, -1, t, e, n, r, o, 4), s("x", "y", "z", -1, -1, t, e, -n, r, o, 5), this.setIndex(l), this.addAttribute("position", new I(u, 3)), this.addAttribute("normal", new I(h, 3)), this.addAttribute("uv", new I(p, 2)) + } + } + Ul = "void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}", jl = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}", H.prototype = Object.create(S.prototype), H.prototype.constructor = H, H.prototype.isShaderMaterial = 1, H.prototype.copy = function(t) { + return S.prototype.copy.call(this, t), this.fragmentShader = t.fragmentShader, this.vertexShader = t.vertexShader, this.uniforms = G(t.uniforms), this.defines = Object.assign({}, t.defines), this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.lights = t.lights, this.clipping = t.clipping, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this.extensions = t.extensions, this + }, H.prototype.toJSON = function(t) { + var e, n, i, r, o = S.prototype.toJSON.call(this, t); + for (e in o.uniforms = {}, this.uniforms)(n = this.uniforms[e].value) && n.isTexture ? o.uniforms[e] = { + type: "t", + value: n.toJSON(t).uuid + } : n && n.isColor ? o.uniforms[e] = { + type: "c", + value: n.getHex() + } : n && n.isVector2 ? o.uniforms[e] = { + type: "v2", + value: n.toArray() + } : n && n.isVector3 ? o.uniforms[e] = { + type: "v3", + value: n.toArray() + } : n && n.isVector4 ? o.uniforms[e] = { + type: "v4", + value: n.toArray() + } : n && n.isMatrix3 ? o.uniforms[e] = { + type: "m3", + value: n.toArray() + } : n && n.isMatrix4 ? o.uniforms[e] = { + type: "m4", + value: n.toArray() + } : o.uniforms[e] = { + value: n + }; + for (r in Object.keys(this.defines).length > 0 && (o.defines = this.defines), o.vertexShader = this.vertexShader, o.fragmentShader = this.fragmentShader, i = {}, this.extensions) 1 == this.extensions[r] && (i[r] = 1); + return Object.keys(i).length > 0 && (o.extensions = i), o + }, q.prototype = Object.assign(Object.create(p.prototype), { + constructor: q, + isCamera: 1, + copy: function(t, e) { + return p.prototype.copy.call(this, t, e), this.matrixWorldInverse.copy(t.matrixWorldInverse), this.projectionMatrix.copy(t.projectionMatrix), this.projectionMatrixInverse.copy(t.projectionMatrixInverse), this + }, + getWorldDirection: function(t) { + void 0 === t && (t = new i), this.updateMatrixWorld(1); + var e = this.matrixWorld.elements; + return t.set(-e[8], -e[9], -e[10]).normalize() + }, + updateMatrixWorld: function(t) { + p.prototype.updateMatrixWorld.call(this, t), this.matrixWorldInverse.getInverse(this.matrixWorld) + }, + clone: function() { + return (new this.constructor).copy(this) + } + }), X.prototype = Object.assign(Object.create(q.prototype), { + constructor: X, + isPerspectiveCamera: 1, + copy: function(t, e) { + return q.prototype.copy.call(this, t, e), this.fov = t.fov, this.zoom = t.zoom, this.near = t.near, this.far = t.far, this.focus = t.focus, this.aspect = t.aspect, this.view = null === t.view ? null : Object.assign({}, t.view), this.filmGauge = t.filmGauge, this.filmOffset = t.filmOffset, this + }, + setFocalLength: function(t) { + var e = .5 * this.getFilmHeight() / t; + this.fov = 2 * ic.RAD2DEG * Math.atan(e), this.updateProjectionMatrix() + }, + getFocalLength: function() { + var t = Math.tan(.5 * ic.DEG2RAD * this.fov); + return .5 * this.getFilmHeight() / t + }, + getEffectiveFOV: function() { + return 2 * ic.RAD2DEG * Math.atan(Math.tan(.5 * ic.DEG2RAD * this.fov) / this.zoom) + }, + getFilmWidth: function() { + return this.filmGauge * Math.min(this.aspect, 1) + }, + getFilmHeight: function() { + return this.filmGauge / Math.max(this.aspect, 1) + }, + setViewOffset: function(t, e, n, i, r, o) { + this.aspect = t / e, null === this.view && (this.view = { + enabled: 1, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }), this.view.enabled = 1, this.view.fullWidth = t, this.view.fullHeight = e, this.view.offsetX = n, this.view.offsetY = i, this.view.width = r, this.view.height = o, this.updateProjectionMatrix() + }, + clearViewOffset: function() { + null !== this.view && (this.view.enabled = 0), this.updateProjectionMatrix() + }, + updateProjectionMatrix: function() { + var t, e, n, i = this.near, + r = i * Math.tan(.5 * ic.DEG2RAD * this.fov) / this.zoom, + o = 2 * r, + a = this.aspect * o, + s = -.5 * a, + c = this.view; + null !== this.view && this.view.enabled && (t = c.fullWidth, e = c.fullHeight, s += c.offsetX * a / t, r -= c.offsetY * o / e, a *= c.width / t, o *= c.height / e), 0 !== (n = this.filmOffset) && (s += i * n / this.getFilmWidth()), this.projectionMatrix.makePerspective(s, s + a, r, r - o, i, this.far), this.projectionMatrixInverse.getInverse(this.projectionMatrix) + }, + toJSON: function(t) { + var e = p.prototype.toJSON.call(this, t); + return e.object.fov = this.fov, e.object.zoom = this.zoom, e.object.near = this.near, e.object.far = this.far, e.object.focus = this.focus, e.object.aspect = this.aspect, null !== this.view && (e.object.view = Object.assign({}, this.view)), e.object.filmGauge = this.filmGauge, e.object.filmOffset = this.filmOffset, e + } + }), Vl = 90, Gl = 1, Y.prototype = Object.create(p.prototype), Y.prototype.constructor = Y, Z.prototype = Object.create(s.prototype), Z.prototype.constructor = Z, Z.prototype.isWebGLRenderTargetCube = 1, Z.prototype.fromEquirectangularTexture = function(t, e) { + var n, i, r, o, a; + return this.texture.type = e.type, this.texture.format = e.format, this.texture.encoding = e.encoding, n = new d, (r = new H({ + type: "CubemapFromEquirect", + uniforms: G((i = { + uniforms: { + tEquirect: { + value: null + } + }, + vertexShader: "varying vec3 vWorldDirection;\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}", + fragmentShader: "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\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}" + }).uniforms), + vertexShader: i.vertexShader, + fragmentShader: i.fragmentShader, + side: jo, + blending: qo + })).uniforms.tEquirect.value = e, o = new B(new up(5, 5, 5), r), n.add(o), (a = new Y(1, 10, 1)).renderTarget = this, a.renderTarget.texture.name = "CubeCameraTexture", a.update(t, n), o.geometry.dispose(), o.material.dispose(), this + }, J.prototype = Object.create(o.prototype), J.prototype.constructor = J, J.prototype.isDataTexture = 1, Wl = new i, Hl = new i, ql = new r, Object.assign($.prototype, { + isPlane: 1, + set: function(t, e) { + return this.normal.copy(t), this.constant = e, this + }, + setComponents: function(t, e, n, i) { + return this.normal.set(t, e, n), this.constant = i, this + }, + setFromNormalAndCoplanarPoint: function(t, e) { + return this.normal.copy(t), this.constant = -e.dot(this.normal), this + }, + setFromCoplanarPoints: function(t, e, n) { + var i = Wl.subVectors(n, e).cross(Hl.subVectors(t, e)).normalize(); + return this.setFromNormalAndCoplanarPoint(i, t), this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + return this.normal.copy(t.normal), this.constant = t.constant, this + }, + normalize: function() { + var t = 1 / this.normal.length(); + return this.normal.multiplyScalar(t), this.constant *= t, this + }, + negate: function() { + return this.constant *= -1, this.normal.negate(), this + }, + distanceToPoint: function(t) { + return this.normal.dot(t) + this.constant + }, + distanceToSphere: function(t) { + return this.distanceToPoint(t.center) - t.radius + }, + projectPoint: function(t, e) { + return void 0 === e && (e = new i), e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t) + }, + intersectLine: function(t, e) { + var n, r, o; + return void 0 === e && (e = new i), n = t.delta(Wl), 0 === (r = this.normal.dot(n)) ? 0 === this.distanceToPoint(t.start) ? e.copy(t.start) : void 0 : (o = -(t.start.dot(this.normal) + this.constant) / r) < 0 || o > 1 ? void 0 : e.copy(n).multiplyScalar(o).add(t.start) + }, + intersectsLine: function(t) { + var e = this.distanceToPoint(t.start), + n = this.distanceToPoint(t.end); + return e < 0 && n > 0 || n < 0 && e > 0 + }, + intersectsBox: function(t) { + return t.intersectsPlane(this) + }, + intersectsSphere: function(t) { + return t.intersectsPlane(this) + }, + coplanarPoint: function(t) { + return void 0 === t && (t = new i), t.copy(this.normal).multiplyScalar(-this.constant) + }, + applyMatrix4: function(t, e) { + var n = e || ql.getNormalMatrix(t), + i = this.coplanarPoint(Wl).applyMatrix4(t), + r = this.normal.applyMatrix3(n).normalize(); + return this.constant = -i.dot(r), this + }, + translate: function(t) { + return this.constant -= t.dot(this.normal), this + }, + equals: function(t) { + return t.normal.equals(this.normal) && t.constant === this.constant + } + }), Xl = new g, Yl = new i, Object.assign(Q.prototype, { + set: function(t, e, n, i, r, o) { + var a = this.planes; + return a[0].copy(t), a[1].copy(e), a[2].copy(n), a[3].copy(i), a[4].copy(r), a[5].copy(o), this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + var e, n = this.planes; + for (e = 0; e < 6; e++) n[e].copy(t.planes[e]); + return this + }, + setFromMatrix: function(t) { + var e = this.planes, + n = t.elements, + i = n[0], + r = n[1], + o = n[2], + a = n[3], + s = n[4], + c = n[5], + l = n[6], + u = n[7], + h = n[8], + p = n[9], + d = n[10], + f = n[11], + m = n[12], + g = n[13], + v = n[14], + y = n[15]; + return e[0].setComponents(a - i, u - s, f - h, y - m).normalize(), e[1].setComponents(a + i, u + s, f + h, y + m).normalize(), e[2].setComponents(a + r, u + c, f + p, y + g).normalize(), e[3].setComponents(a - r, u - c, f - p, y - g).normalize(), e[4].setComponents(a - o, u - l, f - d, y - v).normalize(), e[5].setComponents(a + o, u + l, f + d, y + v).normalize(), this + }, + intersectsObject: function(t) { + var e = t.geometry; + return null === e.boundingSphere && e.computeBoundingSphere(), Xl.copy(e.boundingSphere).applyMatrix4(t.matrixWorld), this.intersectsSphere(Xl) + }, + intersectsSprite: function(t) { + return Xl.center.set(0, 0, 0), Xl.radius = .7071067811865476, Xl.applyMatrix4(t.matrixWorld), this.intersectsSphere(Xl) + }, + intersectsSphere: function(t) { + var e, n = this.planes, + i = t.center, + r = -t.radius; + for (e = 0; e < 6; e++) + if (n[e].distanceToPoint(i) < r) return 0; + return 1 + }, + intersectsBox: function(t) { + var e, n, i = this.planes; + for (e = 0; e < 6; e++) + if (n = i[e], Yl.x = n.normal.x > 0 ? t.max.x : t.min.x, Yl.y = n.normal.y > 0 ? t.max.y : t.min.y, Yl.z = n.normal.z > 0 ? t.max.z : t.min.z, n.distanceToPoint(Yl) < 0) return 0; + return 1 + }, + containsPoint: function(t) { + var e, n = this.planes; + for (e = 0; e < 6; e++) + if (n[e].distanceToPoint(t) < 0) return 0; + return 1 + } + }), Zl = { + alphamap_fragment: "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif", + alphamap_pars_fragment: "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif", + alphatest_fragment: "#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif", + 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( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif", + aomap_pars_fragment: "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif", + begin_vertex: "vec3 transformed = vec3( position );", + beginnormal_vertex: "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif", + bsdfs: "vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\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\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\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}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\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 vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( 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 vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\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#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif", + 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", + 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", + clipping_planes_pars_fragment: "#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( STANDARD ) && ! defined( PHONG ) && ! defined( MATCAP )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif", + clipping_planes_pars_vertex: "#if NUM_CLIPPING_PLANES > 0 && ! defined( STANDARD ) && ! defined( PHONG ) && ! defined( MATCAP )\n\tvarying vec3 vViewPosition;\n#endif", + clipping_planes_vertex: "#if NUM_CLIPPING_PLANES > 0 && ! defined( STANDARD ) && ! defined( PHONG ) && ! defined( MATCAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif", + color_fragment: "#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif", + color_pars_fragment: "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif", + color_pars_vertex: "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif", + color_vertex: "#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif", + 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#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(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}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\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#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\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}\nbool isPerspectiveMatrix( mat4 m ) {\n return m[ 2 ][ 3 ] == - 1.0;\n}", + 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( sampler2D envMap, 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", + defaultnormal_vertex: "vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\ttransformedNormal = mat3( instanceMatrix ) * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = normalMatrix * objectTangent;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif", + displacementmap_pars_vertex: "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif", + displacementmap_vertex: "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif", + emissivemap_fragment: "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif", + emissivemap_pars_fragment: "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif", + encodings_fragment: "gl_FragColor = linearToOutputTexel( gl_FragColor );", + 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.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\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.a );\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.a );\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.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, 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.r, 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 = cLogLuvM * value.rgb;\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 = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}", + envmap_fragment: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\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", + envmap_common_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif", + envmap_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif", + envmap_pars_vertex: "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif", + envmap_physical_pars_fragment: "#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\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( envMap, 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 roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t vec3 reflectVec = reflect( -viewDir, normal );\n\t\t reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t vec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, 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( envMap, queryReflectVec, roughness );\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", + envmap_vertex: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\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", + fog_vertex: "#ifdef USE_FOG\n\tfogDepth = -mvPosition.z;\n#endif", + fog_pars_vertex: "#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif", + fog_fragment: "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\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", + 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", + 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", + lightmap_fragment: "#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif", + lightmap_pars_fragment: "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif", + 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 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = 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\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif", + lights_pars_begin: "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\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", + lights_phong_fragment: "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;", + 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)", + lights_physical_fragment: "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = saturate( clearcoat );\tmaterial.clearcoatRoughness = clamp( clearcoatRoughness, 0.04, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif", + lights_physical_pars_fragment: "struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\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#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\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 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\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\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}", + lights_fragment_begin: "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\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#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tdirectLight.color *= all( bvec3( pointLight.shadow, directLight.visible, receiveShadow ) ) ? 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#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tdirectLight.color *= all( bvec3( spotLight.shadow, directLight.visible, receiveShadow ) ) ? 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#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectLight.color *= all( bvec3( directionalLight.shadow, directLight.visible, receiveShadow ) ) ? 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 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\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", + 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( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif", + 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, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif", + logdepthbuf_fragment: "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 1.0 ? log2( vFragDepth ) * logDepthBufFC * 0.5 : gl_FragCoord.z;\n#endif", + logdepthbuf_pars_fragment: "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif", + logdepthbuf_pars_vertex: "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif", + logdepthbuf_vertex: "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif", + map_fragment: "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif", + map_pars_fragment: "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif", + 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", + map_particle_pars_fragment: "#ifdef USE_MAP\n\tuniform mat3 uvTransform;\n\tuniform sampler2D map;\n#endif", + metalnessmap_fragment: "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif", + metalnessmap_pars_fragment: "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif", + 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", + 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", + 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", + 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\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;", + normal_fragment_maps: "#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\t#ifdef USE_TANGENT\n\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = normalScale * mapN.xy;\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, normalScale, normalMap );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif", + normalmap_pars_fragment: "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec2 normalScale, in sampler2D normalMap ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy *= normalScale;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tbool frontFacing = dot( cross( S, T ), N ) > 0.0;\n\t\t\tmapN.xy *= ( float( frontFacing ) * 2.0 - 1.0 );\n\t\t#else\n\t\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\tmat3 tsn = mat3( S, T, N );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif", + clearcoat_normal_fragment_begin: "#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif", + clearcoat_normal_fragment_maps: "#ifdef USE_CLEARCOAT_NORMALMAP\n\t#ifdef USE_TANGENT\n\t\tmat3 vTBN = mat3( tangent, bitangent, clearcoatNormal );\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = clearcoatNormalScale * mapN.xy;\n\t\tclearcoatNormal = normalize( vTBN * mapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatNormalScale, clearcoatNormalMap );\n\t#endif\n#endif", + clearcoat_normalmap_pars_fragment: "#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif", + 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}\nvec4 encodeHalfRGBA ( vec2 v ) {\n\tvec4 encoded = vec4( 0.0 );\n\tconst vec2 offset = vec2( 1.0 / 255.0, 0.0 );\n\tencoded.xy = vec2( v.x, fract( v.x * 255.0 ) );\n\tencoded.xy = encoded.xy - ( encoded.yy * offset );\n\tencoded.zw = vec2( v.y, fract( v.y * 255.0 ) );\n\tencoded.zw = encoded.zw - ( encoded.ww * offset );\n\treturn encoded;\n}\nvec2 decodeHalfRGBA( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\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}", + premultiplied_alpha_fragment: "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif", + project_vertex: "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;", + dithering_fragment: "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif", + dithering_pars_fragment: "#ifdef 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", + roughnessmap_fragment: "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif", + roughnessmap_pars_fragment: "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif", + shadowmap_pars_fragment: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn decodeHalfRGBA( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\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 ) + 0.5 ) * texelSize;\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\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\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( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), 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( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), 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 / 17.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#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\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 ) || defined( SHADOWMAP_TYPE_VSM )\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", + shadowmap_pars_vertex: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif", + shadowmap_vertex: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif", + shadowmask_pars_fragment: "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= all( bvec2( directionalLight.shadow, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= all( bvec2( spotLight.shadow, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= all( bvec2( pointLight.shadow, receiveShadow ) ) ? 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}", + 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", + skinning_pars_vertex: "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp 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", + 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", + 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\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif", + 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", + specularmap_pars_fragment: "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif", + tonemapping_fragment: "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif", + tonemapping_pars_fragment: "#ifndef saturate\n#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}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( ( color * ( 2.51 * color + 0.03 ) ) / ( color * ( 2.43 * color + 0.59 ) + 0.14 ) );\n}", + uv_pars_fragment: "#ifdef USE_UV\n\tvarying vec2 vUv;\n#endif", + uv_pars_vertex: "#ifdef USE_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif", + uv_vertex: "#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif", + uv2_pars_fragment: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif", + uv2_pars_vertex: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif", + uv2_vertex: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif", + worldpos_vertex: "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif", + background_frag: "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", + background_vert: "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}", + cube_frag: "uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}", + cube_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}", + depth_frag: "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}", + depth_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + distanceRGBA_frag: "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}", + distanceRGBA_vert: "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}", + equirect_frag: "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\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\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", + equirect_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}", + linedashed_frag: "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", + linedashed_vert: "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}", + meshbasic_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = 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 \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshbasic_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshlambert_frag: "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshlambert_vert: "#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshmatcap_frag: "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshmatcap_vert: "#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}", + meshphong_frag: "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshphong_vert: "#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshphysical_frag: "#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSPARENCY\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSPARENCY\n\tuniform float transparency;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSPARENCY\n\t\tdiffuseColor.a *= saturate( 1. - transparency + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshphysical_vert: "#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", + normal_frag: "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}", + normal_vert: "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}", + points_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", + points_vert: "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}", + shadow_frag: "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n}", + shadow_vert: "#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + sprite_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}", + sprite_vert: "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}" + }, Jl = { + common: { + diffuse: { + value: new x(15658734) + }, + opacity: { + value: 1 + }, + map: { + value: null + }, + uvTransform: { + value: new r + }, + alphaMap: { + value: null + } + }, + specularmap: { + specularMap: { + value: null + } + }, + envmap: { + envMap: { + value: null + }, + flipEnvMap: { + value: -1 + }, + reflectivity: { + value: 1 + }, + refractionRatio: { + value: .98 + }, + maxMipLevel: { + value: 0 + } + }, + aomap: { + aoMap: { + value: null + }, + aoMapIntensity: { + value: 1 + } + }, + lightmap: { + lightMap: { + value: null + }, + lightMapIntensity: { + value: 1 + } + }, + emissivemap: { + emissiveMap: { + value: null + } + }, + bumpmap: { + bumpMap: { + value: null + }, + bumpScale: { + value: 1 + } + }, + normalmap: { + normalMap: { + value: null + }, + normalScale: { + value: new e(1, 1) + } + }, + displacementmap: { + displacementMap: { + value: null + }, + displacementScale: { + value: 1 + }, + displacementBias: { + value: 0 + } + }, + roughnessmap: { + roughnessMap: { + value: null + } + }, + metalnessmap: { + metalnessMap: { + value: null + } + }, + gradientmap: { + gradientMap: { + value: null + } + }, + fog: { + fogDensity: { + value: 25e-5 + }, + fogNear: { + value: 1 + }, + fogFar: { + value: 2e3 + }, + fogColor: { + value: new x(16777215) + } + }, + lights: { + ambientLightColor: { + value: [] + }, + lightProbe: { + value: [] + }, + directionalLights: { + value: [], + properties: { + direction: {}, + color: {}, + shadow: {}, + shadowBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } + }, + directionalShadowMap: { + value: [] + }, + directionalShadowMatrix: { + value: [] + }, + spotLights: { + value: [], + properties: { + color: {}, + position: {}, + direction: {}, + distance: {}, + coneCos: {}, + penumbraCos: {}, + decay: {}, + shadow: {}, + shadowBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } + }, + spotShadowMap: { + value: [] + }, + spotShadowMatrix: { + value: [] + }, + pointLights: { + value: [], + properties: { + color: {}, + position: {}, + decay: {}, + distance: {}, + shadow: {}, + shadowBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + shadowCameraNear: {}, + shadowCameraFar: {} + } + }, + pointShadowMap: { + value: [] + }, + pointShadowMatrix: { + value: [] + }, + hemisphereLights: { + value: [], + properties: { + direction: {}, + skyColor: {}, + groundColor: {} + } + }, + rectAreaLights: { + value: [], + properties: { + color: {}, + position: {}, + width: {}, + height: {} + } + } + }, + points: { + diffuse: { + value: new x(15658734) + }, + opacity: { + value: 1 + }, + size: { + value: 1 + }, + scale: { + value: 1 + }, + map: { + value: null + }, + uvTransform: { + value: new r + } + }, + sprite: { + diffuse: { + value: new x(15658734) + }, + opacity: { + value: 1 + }, + center: { + value: new e(.5, .5) + }, + rotation: { + value: 0 + }, + map: { + value: null + }, + uvTransform: { + value: new r + } + } + }, ($l = { + basic: { + uniforms: W([Jl.common, Jl.specularmap, Jl.envmap, Jl.aomap, Jl.lightmap, Jl.fog]), + vertexShader: Zl.meshbasic_vert, + fragmentShader: Zl.meshbasic_frag + }, + lambert: { + uniforms: W([Jl.common, Jl.specularmap, Jl.envmap, Jl.aomap, Jl.lightmap, Jl.emissivemap, Jl.fog, Jl.lights, { + emissive: { + value: new x(0) + } + }]), + vertexShader: Zl.meshlambert_vert, + fragmentShader: Zl.meshlambert_frag + }, + phong: { + uniforms: W([Jl.common, Jl.specularmap, Jl.envmap, Jl.aomap, Jl.lightmap, Jl.emissivemap, Jl.bumpmap, Jl.normalmap, Jl.displacementmap, Jl.gradientmap, Jl.fog, Jl.lights, { + emissive: { + value: new x(0) + }, + specular: { + value: new x(1118481) + }, + shininess: { + value: 30 + } + }]), + vertexShader: Zl.meshphong_vert, + fragmentShader: Zl.meshphong_frag + }, + standard: { + uniforms: W([Jl.common, Jl.envmap, Jl.aomap, Jl.lightmap, Jl.emissivemap, Jl.bumpmap, Jl.normalmap, Jl.displacementmap, Jl.roughnessmap, Jl.metalnessmap, Jl.fog, Jl.lights, { + emissive: { + value: new x(0) + }, + roughness: { + value: .5 + }, + metalness: { + value: .5 + }, + envMapIntensity: { + value: 1 + } + }]), + vertexShader: Zl.meshphysical_vert, + fragmentShader: Zl.meshphysical_frag + }, + matcap: { + uniforms: W([Jl.common, Jl.bumpmap, Jl.normalmap, Jl.displacementmap, Jl.fog, { + matcap: { + value: null + } + }]), + vertexShader: Zl.meshmatcap_vert, + fragmentShader: Zl.meshmatcap_frag + }, + points: { + uniforms: W([Jl.points, Jl.fog]), + vertexShader: Zl.points_vert, + fragmentShader: Zl.points_frag + }, + dashed: { + uniforms: W([Jl.common, Jl.fog, { + scale: { + value: 1 + }, + dashSize: { + value: 1 + }, + totalSize: { + value: 2 + } + }]), + vertexShader: Zl.linedashed_vert, + fragmentShader: Zl.linedashed_frag + }, + depth: { + uniforms: W([Jl.common, Jl.displacementmap]), + vertexShader: Zl.depth_vert, + fragmentShader: Zl.depth_frag + }, + normal: { + uniforms: W([Jl.common, Jl.bumpmap, Jl.normalmap, Jl.displacementmap, { + opacity: { + value: 1 + } + }]), + vertexShader: Zl.normal_vert, + fragmentShader: Zl.normal_frag + }, + sprite: { + uniforms: W([Jl.sprite, Jl.fog]), + vertexShader: Zl.sprite_vert, + fragmentShader: Zl.sprite_frag + }, + background: { + uniforms: { + uvTransform: { + value: new r + }, + t2D: { + value: null + } + }, + vertexShader: Zl.background_vert, + fragmentShader: Zl.background_frag + }, + cube: { + uniforms: { + tCube: { + value: null + }, + tFlip: { + value: -1 + }, + opacity: { + value: 1 + } + }, + vertexShader: Zl.cube_vert, + fragmentShader: Zl.cube_frag + }, + equirect: { + uniforms: { + tEquirect: { + value: null + } + }, + vertexShader: Zl.equirect_vert, + fragmentShader: Zl.equirect_frag + }, + distanceRGBA: { + uniforms: W([Jl.common, Jl.displacementmap, { + referencePosition: { + value: new i + }, + nearDistance: { + value: 1 + }, + farDistance: { + value: 1e3 + } + }]), + vertexShader: Zl.distanceRGBA_vert, + fragmentShader: Zl.distanceRGBA_frag + }, + shadow: { + uniforms: W([Jl.lights, Jl.fog, { + color: { + value: new x(0) + }, + opacity: { + value: 1 + } + }]), + vertexShader: Zl.shadow_vert, + fragmentShader: Zl.shadow_frag + } + }).physical = { + uniforms: W([$l.standard.uniforms, { + transparency: { + value: 0 + }, + clearcoat: { + value: 0 + }, + clearcoatRoughness: { + value: 0 + }, + sheen: { + value: new x(0) + }, + clearcoatNormalScale: { + value: new e(1, 1) + }, + clearcoatNormalMap: { + value: null + } + }]), + vertexShader: Zl.meshphysical_vert, + fragmentShader: Zl.meshphysical_frag + }, et.prototype = Object.create(V.prototype), et.prototype.constructor = et, nt.prototype = Object.create(k.prototype), nt.prototype.constructor = nt, ft.prototype = Object.create(o.prototype), ft.prototype.constructor = ft, ft.prototype.isCubeTexture = 1, Object.defineProperty(ft.prototype, "images", { + get: function() { + return this.image + }, + set: function(t) { + this.image = t + } + }), mt.prototype = Object.create(o.prototype), mt.prototype.constructor = mt, mt.prototype.isDataTexture2DArray = 1, gt.prototype = Object.create(o.prototype), gt.prototype.constructor = gt, gt.prototype.isDataTexture3D = 1, Ql = new o, Kl = new mt, tu = new gt, eu = new ft, nu = [], iu = [], ru = new Float32Array(16), ou = new Float32Array(9), au = new Float32Array(4), Jt.prototype.updateCache = function(t) { + var e = this.cache; + t instanceof Float32Array && e.length !== t.length && (this.cache = new Float32Array(t.length)), xt(e, t) + }, $t.prototype.setValue = function(t, e, n) { + var i, r, o, a = this.seq; + for (i = 0, r = a.length; i !== r; ++i)(o = a[i]).setValue(t, e[o.id], n) + }, su = /([\w\d_]+)(\])?(\[|\.)?/g, te.prototype.setValue = function(t, e, n, i) { + var r = this.map[e]; + void 0 !== r && r.setValue(t, n, i) + }, te.prototype.setOptional = function(t, e, n) { + var i = e[n]; + void 0 !== i && this.setValue(t, n, i) + }, te.upload = function(t, e, n, i) { + var r, o, a, s; + for (r = 0, o = e.length; r !== o; ++r) 0 != (s = n[(a = e[r]).id]).needsUpdate && a.setValue(t, s.value, i) + }, te.seqWithValue = function(t, e) { + var n, i, r, o = []; + for (n = 0, i = t.length; n !== i; ++n)(r = t[n]).id in e && o.push(r); + return o + }, cu = 0, lu = /^[ \t]*#include +<([\w\d./]+)>/gm, uu = /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g, hu = 0, Ae.prototype = Object.create(S.prototype), Ae.prototype.constructor = Ae, Ae.prototype.isMeshDepthMaterial = 1, Ae.prototype.copy = function(t) { + return S.prototype.copy.call(this, t), this.depthPacking = t.depthPacking, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.map = t.map, this.alphaMap = t.alphaMap, this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this + }, Le.prototype = Object.create(S.prototype), Le.prototype.constructor = Le, Le.prototype.isMeshDistanceMaterial = 1, Le.prototype.copy = function(t) { + return S.prototype.copy.call(this, t), this.referencePosition.copy(t.referencePosition), this.nearDistance = t.nearDistance, this.farDistance = t.farDistance, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.map = t.map, this.alphaMap = t.alphaMap, this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this + }, pu = "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n float mean = 0.0;\n float squared_mean = 0.0;\n \n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n for ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n #ifdef HORIZONAL_PASS\n vec2 distribution = decodeHalfRGBA ( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n mean += distribution.x;\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n #else\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n mean += depth;\n squared_mean += depth * depth;\n #endif\n }\n mean = mean * HALF_SAMPLE_RATE;\n squared_mean = squared_mean * HALF_SAMPLE_RATE;\n float std_dev = pow( squared_mean - mean * mean, 0.5 );\n gl_FragColor = encodeHalfRGBA( vec2( mean, std_dev ) );\n}", du = "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}", Oe.prototype = Object.assign(Object.create(s.prototype), { + constructor: Oe, + isWebGLMultiviewRenderTarget: 1, + copy: function(t) { + return s.prototype.copy.call(this, t), this.numViews = t.numViews, this + }, + setNumViews: function(t) { + return this.numViews !== t && (this.numViews = t, this.dispose()), this + } + }), Ie.prototype = Object.assign(Object.create(p.prototype), { + constructor: Ie, + isGroup: 1 + }), ze.prototype = Object.assign(Object.create(X.prototype), { + constructor: ze, + isArrayCamera: 1 + }), fu = new i, mu = new i, Object.assign(Fe.prototype, t.prototype), Object.assign(ke.prototype, t.prototype), Object.assign(Ue.prototype, { + isFogExp2: 1, + clone: function() { + return new Ue(this.color, this.density) + }, + toJSON: function() { + return { + type: "FogExp2", + color: this.color.getHex(), + density: this.density + } + } + }), Object.assign(je.prototype, { + isFog: 1, + clone: function() { + return new je(this.color, this.near, this.far) + }, + toJSON: function() { + return { + type: "Fog", + color: this.color.getHex(), + near: this.near, + far: this.far + } + } + }), Object.defineProperty(Ve.prototype, "needsUpdate", { + set: function(t) { + 1 == t && this.version++ + } + }), Object.assign(Ve.prototype, { + isInterleavedBuffer: 1, + onUploadCallback: function() {}, + setDynamic: function(t) { + return this.dynamic = t, this + }, + copy: function(t) { + return this.array = new t.array.constructor(t.array), this.count = t.count, this.stride = t.stride, this.dynamic = t.dynamic, this + }, + copyAt: function(t, e, n) { + t *= this.stride, n *= e.stride; + for (var i = 0, r = this.stride; i < r; i++) this.array[t + i] = e.array[n + i]; + return this + }, + set: function(t, e) { + return void 0 === e && (e = 0), this.array.set(t, e), this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + onUpload: function(t) { + return this.onUploadCallback = t, this + } + }), Object.defineProperties(Ge.prototype, { + count: { + get: function() { + return this.data.count + } + }, + array: { + get: function() { + return this.data.array + } + } + }), Object.assign(Ge.prototype, { + isInterleavedBufferAttribute: 1, + setX: function(t, e) { + return this.data.array[t * this.data.stride + this.offset] = e, this + }, + setY: function(t, e) { + return this.data.array[t * this.data.stride + this.offset + 1] = e, this + }, + setZ: function(t, e) { + return this.data.array[t * this.data.stride + this.offset + 2] = e, this + }, + setW: function(t, e) { + return this.data.array[t * this.data.stride + this.offset + 3] = e, this + }, + getX: function(t) { + return this.data.array[t * this.data.stride + this.offset] + }, + getY: function(t) { + return this.data.array[t * this.data.stride + this.offset + 1] + }, + getZ: function(t) { + return this.data.array[t * this.data.stride + this.offset + 2] + }, + getW: function(t) { + return this.data.array[t * this.data.stride + this.offset + 3] + }, + setXY: function(t, e, n) { + return t = t * this.data.stride + this.offset, this.data.array[t + 0] = e, this.data.array[t + 1] = n, this + }, + setXYZ: function(t, e, n, i) { + return t = t * this.data.stride + this.offset, this.data.array[t + 0] = e, this.data.array[t + 1] = n, this.data.array[t + 2] = i, this + }, + setXYZW: function(t, e, n, i, r) { + return t = t * this.data.stride + this.offset, this.data.array[t + 0] = e, this.data.array[t + 1] = n, this.data.array[t + 2] = i, this.data.array[t + 3] = r, this + } + }), We.prototype = Object.create(S.prototype), We.prototype.constructor = We, We.prototype.isSpriteMaterial = 1, We.prototype.copy = function(t) { + return S.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.rotation = t.rotation, this.sizeAttenuation = t.sizeAttenuation, this + }, vu = new i, yu = new i, xu = new i, bu = new e, _u = new e, wu = new l, Mu = new i, Su = new i, Tu = new i, Au = new e, Lu = new e, Cu = new e, He.prototype = Object.assign(Object.create(p.prototype), { + constructor: He, + isSprite: 1, + raycast: function(t, n) { + var i, r, o, a, s; + t.camera, yu.setFromMatrixScale(this.matrixWorld), wu.copy(t.camera.matrixWorld), this.modelViewMatrix.multiplyMatrices(t.camera.matrixWorldInverse, this.matrixWorld), xu.setFromMatrixPosition(this.modelViewMatrix), t.camera.isPerspectiveCamera && 0 == this.material.sizeAttenuation && yu.multiplyScalar(-xu.z), 0 !== (i = this.material.rotation) && (o = Math.cos(i), r = Math.sin(i)), a = this.center, qe(Mu.set(-.5, -.5, 0), xu, a, yu, r, o), qe(Su.set(.5, -.5, 0), xu, a, yu, r, o), qe(Tu.set(.5, .5, 0), xu, a, yu, r, o), Au.set(0, 0), Lu.set(1, 0), Cu.set(1, 1), null === t.ray.intersectTriangle(Mu, Su, Tu, 0, vu) && (qe(Su.set(-.5, .5, 0), xu, a, yu, r, o), Lu.set(0, 1), null === t.ray.intersectTriangle(Mu, Tu, Su, 0, vu)) || (s = t.ray.origin.distanceTo(vu)) < t.near || s > t.far || n.push({ + distance: s, + point: vu.clone(), + uv: y.getUV(vu, Mu, Su, Tu, Au, Lu, Cu, new e), + face: null, + object: this + }) + }, + clone: function() { + return new this.constructor(this.material).copy(this) + }, + copy: function(t) { + return p.prototype.copy.call(this, t), void 0 !== t.center && this.center.copy(t.center), this + } + }), Pu = new i, Eu = new i, Xe.prototype = Object.assign(Object.create(p.prototype), { + constructor: Xe, + isLOD: 1, + copy: function(t) { + var e, n, i, r; + for (p.prototype.copy.call(this, t, 0), n = 0, i = (e = t.levels).length; n < i; n++) r = e[n], this.addLevel(r.object.clone(), r.distance); + return this + }, + addLevel: function(t, e) { + var n, i; + for (void 0 === e && (e = 0), e = Math.abs(e), n = this.levels, i = 0; i < n.length && !(e < n[i].distance); i++); + return n.splice(i, 0, { + distance: e, + object: t + }), this.add(t), this + }, + getObjectForDistance: function(t) { + var e, n, i = this.levels; + for (e = 1, n = i.length; e < n && !(t < i[e].distance); e++); + return i[e - 1].object + }, + raycast: function(t, e) { + Pu.setFromMatrixPosition(this.matrixWorld); + var n = t.ray.origin.distanceTo(Pu); + this.getObjectForDistance(n).raycast(t, e) + }, + update: function(t) { + var e, n, i, r = this.levels; + if (r.length > 1) { + for (Pu.setFromMatrixPosition(t.matrixWorld), Eu.setFromMatrixPosition(this.matrixWorld), e = Pu.distanceTo(Eu), r[0].object.visible = 1, n = 1, i = r.length; n < i && e >= r[n].distance; n++) r[n - 1].object.visible = 0, r[n].object.visible = 1; + for (; n < i; n++) r[n].object.visible = 0 + } + }, + toJSON: function(t) { + var e, n, i, r, o = p.prototype.toJSON.call(this, t); + for (o.object.levels = [], n = 0, i = (e = this.levels).length; n < i; n++) r = e[n], o.object.levels.push({ + object: r.object.uuid, + distance: r.distance + }); + return o + } + }), Ye.prototype = Object.assign(Object.create(B.prototype), { + constructor: Ye, + isSkinnedMesh: 1, + bind: function(t, e) { + this.skeleton = t, void 0 === e && (this.updateMatrixWorld(1), this.skeleton.calculateInverses(), e = this.matrixWorld), this.bindMatrix.copy(e), this.bindMatrixInverse.getInverse(e) + }, + pose: function() { + this.skeleton.pose() + }, + normalizeSkinWeights: function() { + var t, e, n, i = new a, + r = this.geometry.attributes.skinWeight; + for (t = 0, e = r.count; t < e; t++) i.x = r.getX(t), i.y = r.getY(t), i.z = r.getZ(t), i.w = r.getW(t), (n = 1 / i.manhattanLength()) != 1 / 0 ? i.multiplyScalar(n) : i.set(1, 0, 0, 0), r.setXYZW(t, i.x, i.y, i.z, i.w) + }, + updateMatrixWorld: function(t) { + B.prototype.updateMatrixWorld.call(this, t), "attached" === this.bindMode ? this.bindMatrixInverse.getInverse(this.matrixWorld) : "detached" === this.bindMode && this.bindMatrixInverse.getInverse(this.bindMatrix) + }, + clone: function() { + return new this.constructor(this.geometry, this.material).copy(this) + } + }), Nu = new l, Ou = new l, Object.assign(Ze.prototype, { + calculateInverses: function() { + var t, e, n; + for (this.boneInverses = [], t = 0, e = this.bones.length; t < e; t++) n = new l, this.bones[t] && n.getInverse(this.bones[t].matrixWorld), this.boneInverses.push(n) + }, + pose: function() { + var t, e, n; + for (e = 0, n = this.bones.length; e < n; e++)(t = this.bones[e]) && t.matrixWorld.getInverse(this.boneInverses[e]); + for (e = 0, n = this.bones.length; e < n; e++)(t = this.bones[e]) && (t.parent && t.parent.isBone ? (t.matrix.getInverse(t.parent.matrixWorld), t.matrix.multiply(t.matrixWorld)) : t.matrix.copy(t.matrixWorld), t.matrix.decompose(t.position, t.quaternion, t.scale)) + }, + update: function() { + var t, e, n, i = this.bones, + r = this.boneInverses, + o = this.boneMatrices, + a = this.boneTexture; + for (t = 0, e = i.length; t < e; t++) n = i[t] ? i[t].matrixWorld : Ou, Nu.multiplyMatrices(n, r[t]), Nu.toArray(o, 16 * t); + void 0 !== a && (a.needsUpdate = 1) + }, + clone: function() { + return new Ze(this.bones, this.boneInverses) + }, + getBoneByName: function(t) { + var e, n, i; + for (e = 0, n = this.bones.length; e < n; e++) + if ((i = this.bones[e]).name === t) return i + } + }), Je.prototype = Object.assign(Object.create(p.prototype), { + constructor: Je, + isBone: 1 + }), $e.prototype = Object.assign(Object.create(B.prototype), { + constructor: $e, + isInstancedMesh: 1, + raycast: function() {}, + setMatrixAt: function(t, e) { + e.toArray(this.instanceMatrix.array, 16 * t) + }, + updateMorphTargets: function() {} + }), Qe.prototype = Object.create(S.prototype), Qe.prototype.constructor = Qe, Qe.prototype.isLineBasicMaterial = 1, Qe.prototype.copy = function(t) { + return S.prototype.copy.call(this, t), this.color.copy(t.color), this.linewidth = t.linewidth, this.linecap = t.linecap, this.linejoin = t.linejoin, this + }, Du = new i, Iu = new i, zu = new l, Ru = new v, Fu = new g, Ke.prototype = Object.assign(Object.create(p.prototype), { + constructor: Ke, + isLine: 1, + computeLineDistances: function() { + var t, e, n, i, r, o = this.geometry; + if (o.isBufferGeometry) { + if (null === o.index) { + for (e = [0], n = 1, i = (t = o.attributes.position).count; n < i; n++) Du.fromBufferAttribute(t, n - 1), Iu.fromBufferAttribute(t, n), e[n] = e[n - 1], e[n] += Du.distanceTo(Iu); + o.addAttribute("lineDistance", new I(e, 1)) + } + } else if (o.isGeometry) + for (r = o.vertices, (e = o.lineDistances)[0] = 0, n = 1, i = r.length; n < i; n++) e[n] = e[n - 1], e[n] += r[n - 1].distanceTo(r[n]); + return this + }, + raycast: function(t, e) { + var n, r, o, a, s, c, l, u, h, p, d, f, m, g, v, y, x, b = t.linePrecision, + _ = this.geometry, + w = this.matrixWorld; + if (null === _.boundingSphere && _.computeBoundingSphere(), Fu.copy(_.boundingSphere), Fu.applyMatrix4(w), Fu.radius += b, 0 != t.ray.intersectsSphere(Fu)) + if (zu.getInverse(w), Ru.copy(t.ray).applyMatrix4(zu), r = (n = b / ((this.scale.x + this.scale.y + this.scale.z) / 3)) * n, o = new i, a = new i, s = new i, c = new i, l = this && this.isLineSegments ? 2 : 1, _.isBufferGeometry) + if (u = _.index, h = _.attributes.position.array, null !== u) + for (d = 0, f = (p = u.array).length - 1; d < f; d += l) m = p[d], g = p[d + 1], o.fromArray(h, 3 * m), a.fromArray(h, 3 * g), Ru.distanceSqToSegment(o, a, c, s) > r || (c.applyMatrix4(this.matrixWorld), (v = t.ray.origin.distanceTo(c)) < t.near || v > t.far || e.push({ + distance: v, + point: s.clone().applyMatrix4(this.matrixWorld), + index: d, + face: null, + faceIndex: null, + object: this + })); + else + for (d = 0, f = h.length / 3 - 1; d < f; d += l) o.fromArray(h, 3 * d), a.fromArray(h, 3 * d + 3), Ru.distanceSqToSegment(o, a, c, s) > r || (c.applyMatrix4(this.matrixWorld), (v = t.ray.origin.distanceTo(c)) < t.near || v > t.far || e.push({ + distance: v, + point: s.clone().applyMatrix4(this.matrixWorld), + index: d, + face: null, + faceIndex: null, + object: this + })); + else if (_.isGeometry) + for (x = (y = _.vertices).length, d = 0; d < x - 1; d += l) Ru.distanceSqToSegment(y[d], y[d + 1], c, s) > r || (c.applyMatrix4(this.matrixWorld), (v = t.ray.origin.distanceTo(c)) < t.near || v > t.far || e.push({ + distance: v, + point: s.clone().applyMatrix4(this.matrixWorld), + index: d, + face: null, + faceIndex: null, + object: this + })) + }, + clone: function() { + return new this.constructor(this.geometry, this.material).copy(this) + } + }), ku = new i, Bu = new i, tn.prototype = Object.assign(Object.create(Ke.prototype), { + constructor: tn, + isLineSegments: 1, + computeLineDistances: function() { + var t, e, n, i, r, o = this.geometry; + if (o.isBufferGeometry) { + if (null === o.index) { + for (e = [], n = 0, i = (t = o.attributes.position).count; n < i; n += 2) ku.fromBufferAttribute(t, n), Bu.fromBufferAttribute(t, n + 1), e[n] = 0 === n ? 0 : e[n - 1], e[n + 1] = e[n] + ku.distanceTo(Bu); + o.addAttribute("lineDistance", new I(e, 1)) + } + } else if (o.isGeometry) + for (r = o.vertices, e = o.lineDistances, n = 0, i = r.length; n < i; n += 2) ku.copy(r[n]), Bu.copy(r[n + 1]), e[n] = 0 === n ? 0 : e[n - 1], e[n + 1] = e[n] + ku.distanceTo(Bu); + return this + } + }), en.prototype = Object.assign(Object.create(Ke.prototype), { + constructor: en, + isLineLoop: 1 + }), nn.prototype = Object.create(S.prototype), nn.prototype.constructor = nn, nn.prototype.isPointsMaterial = 1, nn.prototype.copy = function(t) { + return S.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.size = t.size, this.sizeAttenuation = t.sizeAttenuation, this.morphTargets = t.morphTargets, this + }, Uu = new l, ju = new v, Vu = new g, Gu = new i, rn.prototype = Object.assign(Object.create(p.prototype), { + constructor: rn, + isPoints: 1, + raycast: function(t, e) { + var n, i, r, o, a, s, c, l, u, h, p = this.geometry, + d = this.matrixWorld, + f = t.params.Points.threshold; + if (null === p.boundingSphere && p.computeBoundingSphere(), Vu.copy(p.boundingSphere), Vu.applyMatrix4(d), Vu.radius += f, 0 != t.ray.intersectsSphere(Vu)) + if (Uu.getInverse(d), ju.copy(t.ray).applyMatrix4(Uu), i = (n = f / ((this.scale.x + this.scale.y + this.scale.z) / 3)) * n, p.isBufferGeometry) + if (r = p.index, o = p.attributes.position.array, null !== r) + for (s = 0, c = (a = r.array).length; s < c; s++) l = a[s], Gu.fromArray(o, 3 * l), on(Gu, l, i, d, t, e, this); + else + for (s = 0, u = o.length / 3; s < u; s++) Gu.fromArray(o, 3 * s), on(Gu, s, i, d, t, e, this); + else + for (s = 0, u = (h = p.vertices).length; s < u; s++) on(h[s], s, i, d, t, e, this) + }, + updateMorphTargets: function() { + var t, e, n, i, r, o, a, s = this.geometry; + if (s.isBufferGeometry) { + if (i = s.morphAttributes, (r = Object.keys(i)).length > 0 && void 0 !== (o = i[r[0]])) + for (this.morphTargetInfluences = [], this.morphTargetDictionary = {}, t = 0, e = o.length; t < e; t++) n = o[t].name || t + "", this.morphTargetInfluences.push(0), this.morphTargetDictionary[n] = t + } else void 0 !== (a = s.morphTargets) && a.length + }, + clone: function() { + return new this.constructor(this.geometry, this.material).copy(this) + } + }), an.prototype = Object.assign(Object.create(o.prototype), { + constructor: an, + isVideoTexture: 1, + update: function() { + var t = this.image; + t.readyState >= t.HAVE_CURRENT_DATA && (this.needsUpdate = 1) + } + }), sn.prototype = Object.create(o.prototype), sn.prototype.constructor = sn, sn.prototype.isCompressedTexture = 1, cn.prototype = Object.create(o.prototype), cn.prototype.constructor = cn, cn.prototype.isCanvasTexture = 1, ln.prototype = Object.create(o.prototype), ln.prototype.constructor = ln, ln.prototype.isDepthTexture = 1, un.prototype = Object.create(k.prototype), un.prototype.constructor = un, hn.prototype = Object.create(V.prototype), hn.prototype.constructor = hn, pn.prototype = Object.create(k.prototype), pn.prototype.constructor = pn, dn.prototype = Object.create(V.prototype), dn.prototype.constructor = dn, fn.prototype = Object.create(k.prototype), fn.prototype.constructor = fn, mn.prototype = Object.create(V.prototype), mn.prototype.constructor = mn, gn.prototype = Object.create(fn.prototype), gn.prototype.constructor = gn, vn.prototype = Object.create(V.prototype), vn.prototype.constructor = vn, yn.prototype = Object.create(fn.prototype), yn.prototype.constructor = yn, xn.prototype = Object.create(V.prototype), xn.prototype.constructor = xn, bn.prototype = Object.create(fn.prototype), bn.prototype.constructor = bn, _n.prototype = Object.create(V.prototype), _n.prototype.constructor = _n, wn.prototype = Object.create(fn.prototype), wn.prototype.constructor = wn, Mn.prototype = Object.create(V.prototype), Mn.prototype.constructor = Mn, Sn.prototype = Object.create(k.prototype), Sn.prototype.constructor = Sn, Sn.prototype.toJSON = function() { + var t = k.prototype.toJSON.call(this); + return t.path = this.parameters.path.toJSON(), t + }, Tn.prototype = Object.create(V.prototype), Tn.prototype.constructor = Tn, An.prototype = Object.create(k.prototype), An.prototype.constructor = An, Ln.prototype = Object.create(V.prototype), Ln.prototype.constructor = Ln, Cn.prototype = Object.create(k.prototype), Cn.prototype.constructor = Cn, Wu = function(t, e, n) { + var i, r, o, a, s, c, l, u, h, p, d, f; + if (n = n || 2, a = [], !(o = Pn(t, 0, r = (i = e && e.length) ? e[0] * n : t.length, n, 1)) || o.next === o.prev) return a; + if (i && (o = function(t, e, n, i) { + var r, o, a, s = []; + for (r = 0, o = e.length; r < o; r++)(a = Pn(t, e[r] * i, r < o - 1 ? e[r + 1] * i : t.length, i, 0)) === a.next && (a.steiner = 1), s.push(Bn(a)); + for (s.sort(Rn), r = 0; r < s.length; r++) Fn(s[r], n), n = En(n, n.next); + return n + }(t, e, o, n)), t.length > 80 * n) { + for (s = l = t[0], c = u = t[1], f = n; f < r; f += n)(h = t[f]) < s && (s = h), (p = t[f + 1]) < c && (c = p), h > l && (l = h), p > u && (u = p); + d = 0 !== (d = Math.max(l - s, u - c)) ? 1 / d : 0 + } + return Nn(o, a, n, s, c, d), a + }, Hu = { + area: function(t) { + var e, n, i = t.length, + r = 0; + for (e = i - 1, n = 0; n < i; e = n++) r += t[e].x * t[n].y - t[n].x * t[e].y; + return .5 * r + }, + isClockWise: function(t) { + return Hu.area(t) < 0 + }, + triangulateShape: function(t, e) { + var n, i, r, o = [], + a = [], + s = []; + for (Jn(t), $n(o, t), n = t.length, e.forEach(Jn), i = 0; i < e.length; i++) a.push(n), n += e[i].length, $n(o, e[i]); + for (r = Wu(o, a), i = 0; i < r.length; i += 3) s.push(r.slice(i, i + 3)); + return s + } + }, Qn.prototype = Object.create(V.prototype), Qn.prototype.constructor = Qn, Qn.prototype.toJSON = function() { + var t = V.prototype.toJSON.call(this); + return ti(this.parameters.shapes, this.parameters.options, t) + }, Kn.prototype = Object.create(k.prototype), Kn.prototype.constructor = Kn, Kn.prototype.toJSON = function() { + var t = k.prototype.toJSON.call(this); + return ti(this.parameters.shapes, this.parameters.options, t) + }, qu = { + generateTopUV: function(t, n, i, r, o) { + var a = n[3 * i], + s = n[3 * i + 1], + c = n[3 * r], + l = n[3 * r + 1], + u = n[3 * o], + h = n[3 * o + 1]; + return [new e(a, s), new e(c, l), new e(u, h)] + }, + generateSideWallUV: function(t, n, i, r, o, a) { + var s = n[3 * i], + c = n[3 * i + 1], + l = n[3 * i + 2], + u = n[3 * r], + h = n[3 * r + 1], + p = n[3 * r + 2], + d = n[3 * o], + f = n[3 * o + 1], + m = n[3 * o + 2], + g = n[3 * a], + v = n[3 * a + 1], + y = n[3 * a + 2]; + return Math.abs(c - h) < .01 ? [new e(s, 1 - l), new e(u, 1 - p), new e(d, 1 - m), new e(g, 1 - y)] : [new e(c, 1 - l), new e(h, 1 - p), new e(f, 1 - m), new e(v, 1 - y)] + } + }, ei.prototype = Object.create(V.prototype), ei.prototype.constructor = ei, ni.prototype = Object.create(Kn.prototype), ni.prototype.constructor = ni, ii.prototype = Object.create(V.prototype), ii.prototype.constructor = ii, ri.prototype = Object.create(k.prototype), ri.prototype.constructor = ri, oi.prototype = Object.create(V.prototype), oi.prototype.constructor = oi, ai.prototype = Object.create(k.prototype), ai.prototype.constructor = ai, si.prototype = Object.create(V.prototype), si.prototype.constructor = si, ci.prototype = Object.create(k.prototype), ci.prototype.constructor = ci, li.prototype = Object.create(V.prototype), li.prototype.constructor = li, li.prototype.toJSON = function() { + var t = V.prototype.toJSON.call(this); + return hi(this.parameters.shapes, t) + }, ui.prototype = Object.create(k.prototype), ui.prototype.constructor = ui, ui.prototype.toJSON = function() { + var t = k.prototype.toJSON.call(this); + return hi(this.parameters.shapes, t) + }, pi.prototype = Object.create(k.prototype), pi.prototype.constructor = pi, di.prototype = Object.create(V.prototype), di.prototype.constructor = di, fi.prototype = Object.create(k.prototype), fi.prototype.constructor = fi, mi.prototype = Object.create(di.prototype), mi.prototype.constructor = mi, gi.prototype = Object.create(fi.prototype), gi.prototype.constructor = gi, vi.prototype = Object.create(V.prototype), vi.prototype.constructor = vi, yi.prototype = Object.create(k.prototype), yi.prototype.constructor = yi, Xu = Object.freeze({ + WireframeGeometry: un, + ParametricGeometry: hn, + ParametricBufferGeometry: pn, + TetrahedronGeometry: mn, + TetrahedronBufferGeometry: gn, + OctahedronGeometry: vn, + OctahedronBufferGeometry: yn, + IcosahedronGeometry: xn, + IcosahedronBufferGeometry: bn, + DodecahedronGeometry: _n, + DodecahedronBufferGeometry: wn, + PolyhedronGeometry: dn, + PolyhedronBufferGeometry: fn, + TubeGeometry: Mn, + TubeBufferGeometry: Sn, + TorusKnotGeometry: Tn, + TorusKnotBufferGeometry: An, + TorusGeometry: Ln, + TorusBufferGeometry: Cn, + TextGeometry: ei, + TextBufferGeometry: ni, + SphereGeometry: ii, + SphereBufferGeometry: ri, + RingGeometry: oi, + RingBufferGeometry: ai, + PlaneGeometry: et, + PlaneBufferGeometry: nt, + LatheGeometry: si, + LatheBufferGeometry: ci, + ShapeGeometry: li, + ShapeBufferGeometry: ui, + ExtrudeGeometry: Qn, + ExtrudeBufferGeometry: Kn, + EdgesGeometry: pi, + ConeGeometry: mi, + ConeBufferGeometry: gi, + CylinderGeometry: di, + CylinderBufferGeometry: fi, + CircleGeometry: vi, + CircleBufferGeometry: yi, + BoxGeometry: class extends V { + constructor(t, e, n, i, r, o) { + super(), this.type = "BoxGeometry", this.parameters = { + width: t, + height: e, + depth: n, + widthSegments: i, + heightSegments: r, + depthSegments: o + }, this.fromBufferGeometry(new up(t, e, n, i, r, o)), this.mergeVertices() + } + }, + BoxBufferGeometry: up + }), xi.prototype = Object.create(S.prototype), xi.prototype.constructor = xi, xi.prototype.isShadowMaterial = 1, xi.prototype.copy = function(t) { + return S.prototype.copy.call(this, t), this.color.copy(t.color), this + }, bi.prototype = Object.create(H.prototype), bi.prototype.constructor = bi, bi.prototype.isRawShaderMaterial = 1, _i.prototype = Object.create(S.prototype), _i.prototype.constructor = _i, _i.prototype.isMeshStandardMaterial = 1, _i.prototype.copy = function(t) { + return S.prototype.copy.call(this, t), this.defines = { + STANDARD: "" + }, this.color.copy(t.color), this.roughness = t.roughness, this.metalness = t.metalness, this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.roughnessMap = t.roughnessMap, this.metalnessMap = t.metalnessMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.envMapIntensity = t.envMapIntensity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this + }, wi.prototype = Object.create(_i.prototype), wi.prototype.constructor = wi, wi.prototype.isMeshPhysicalMaterial = 1, wi.prototype.copy = function(t) { + return _i.prototype.copy.call(this, t), this.defines = { + STANDARD: "", + PHYSICAL: "" + }, this.reflectivity = t.reflectivity, this.clearcoat = t.clearcoat, this.clearcoatRoughness = t.clearcoatRoughness, t.sheen ? this.sheen = (this.sheen || new x).copy(t.sheen) : this.sheen = null, this.clearcoatNormalMap = t.clearcoatNormalMap, this.clearcoatNormalScale.copy(t.clearcoatNormalScale), this.transparency = t.transparency, this + }, Mi.prototype = Object.create(S.prototype), Mi.prototype.constructor = Mi, Mi.prototype.isMeshPhongMaterial = 1, Mi.prototype.copy = function(t) { + return S.prototype.copy.call(this, t), this.color.copy(t.color), this.specular.copy(t.specular), this.shininess = t.shininess, this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.specularMap = t.specularMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.combine = t.combine, this.reflectivity = t.reflectivity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this + }, Si.prototype = Object.create(Mi.prototype), Si.prototype.constructor = Si, Si.prototype.isMeshToonMaterial = 1, Si.prototype.copy = function(t) { + return Mi.prototype.copy.call(this, t), this.gradientMap = t.gradientMap, this + }, Ti.prototype = Object.create(S.prototype), Ti.prototype.constructor = Ti, Ti.prototype.isMeshNormalMaterial = 1, Ti.prototype.copy = function(t) { + return S.prototype.copy.call(this, t), this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this + }, Ai.prototype = Object.create(S.prototype), Ai.prototype.constructor = Ai, Ai.prototype.isMeshLambertMaterial = 1, Ai.prototype.copy = function(t) { + return S.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.specularMap = t.specularMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.combine = t.combine, this.reflectivity = t.reflectivity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this + }, Li.prototype = Object.create(S.prototype), Li.prototype.constructor = Li, Li.prototype.isMeshMatcapMaterial = 1, Li.prototype.copy = function(t) { + return S.prototype.copy.call(this, t), this.defines = { + MATCAP: "" + }, this.color.copy(t.color), this.matcap = t.matcap, this.map = t.map, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.alphaMap = t.alphaMap, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this + }, Ci.prototype = Object.create(Qe.prototype), Ci.prototype.constructor = Ci, Ci.prototype.isLineDashedMaterial = 1, Ci.prototype.copy = function(t) { + return Qe.prototype.copy.call(this, t), this.scale = t.scale, this.dashSize = t.dashSize, this.gapSize = t.gapSize, this + }, Yu = Object.freeze({ + ShadowMaterial: xi, + SpriteMaterial: We, + RawShaderMaterial: bi, + ShaderMaterial: H, + PointsMaterial: nn, + MeshPhysicalMaterial: wi, + MeshStandardMaterial: _i, + MeshPhongMaterial: Mi, + MeshToonMaterial: Si, + MeshNormalMaterial: Ti, + MeshLambertMaterial: Ai, + MeshDepthMaterial: Ae, + MeshDistanceMaterial: Le, + MeshBasicMaterial: T, + MeshMatcapMaterial: Li, + LineDashedMaterial: Ci, + LineBasicMaterial: Qe, + Material: S + }), Zu = { + arraySlice: function(t, e, n) { + return Zu.isTypedArray(t) ? new t.constructor(t.subarray(e, void 0 !== n ? n : t.length)) : t.slice(e, n) + }, + convertArray: function(t, e, n) { + return !t || !n && t.constructor === e ? t : "number" == typeof e.BYTES_PER_ELEMENT ? new e(t) : Array.prototype.slice.call(t) + }, + isTypedArray: function(t) { + return ArrayBuffer.isView(t) && !(t instanceof DataView) + }, + getKeyframeOrder: function(t) { + var e, n = t.length, + i = Array(n); + for (e = 0; e !== n; ++e) i[e] = e; + return i.sort(function(e, n) { + return t[e] - t[n] + }), i + }, + sortedArray: function(t, e, n) { + var i, r, o, a, s = t.length, + c = new t.constructor(s); + for (i = 0, r = 0; r !== s; ++i) + for (o = n[i] * e, a = 0; a !== e; ++a) c[r++] = t[o + a]; + return c + }, + flattenJSON: function(t, e, n, i) { + for (var r, o = 1, a = t[0]; void 0 !== a && void 0 === a[i];) a = t[o++]; + if (void 0 !== a && void 0 !== (r = a[i])) + if (Array.isArray(r)) + do { + void 0 !== (r = a[i]) && (e.push(a.time), n.push.apply(n, r)), a = t[o++] + } while (void 0 !== a); + else if (void 0 !== r.toArray) + do { + void 0 !== (r = a[i]) && (e.push(a.time), r.toArray(n, n.length)), a = t[o++] + } while (void 0 !== a); + else + do { + void 0 !== (r = a[i]) && (e.push(a.time), n.push(r)), a = t[o++] + } while (void 0 !== a) + } + }, Object.assign(Pi.prototype, { + evaluate: function(t) { + var e, n, i = this.parameterPositions, + r = this._cachedIndex, + o = i[r], + a = i[r - 1]; + t: e: n: { + i: if (!(t < o)) { + for (e = r + 2;;) { + if (void 0 === o) { + if (t < a) break i; + return r = i.length, this._cachedIndex = r, this.afterEnd_(r - 1, t, a) + } + if (r === e) break; + if (a = o, t < (o = i[++r])) break e + } + i.length; + break n + }if (t >= a) break t; + for (t < (n = i[1]) && (r = 2, a = n), e = r - 2;;) { + if (void 0 === a) return this._cachedIndex = 0, this.beforeStart_(0, t, o); + if (r === e) break; + if (o = a, t >= (a = i[--r - 1])) break e + } + r = 0 + } + return this.interpolate_(r, a, t, o) + }, + settings: null, + DefaultSettings_: {}, + getSettings_: function() { + return this.settings || this.DefaultSettings_ + }, + copySampleValue_: function(t) { + var e, n = this.resultBuffer, + i = this.sampleValues, + r = this.valueSize, + o = t * r; + for (e = 0; e !== r; ++e) n[e] = i[o + e]; + return n + }, + interpolate_: function() { + throw Error("call to abstract method") + }, + intervalChanged_: function() {} + }), Object.assign(Pi.prototype, { + beforeStart_: Pi.prototype.copySampleValue_, + afterEnd_: Pi.prototype.copySampleValue_ + }), Ei.prototype = Object.assign(Object.create(Pi.prototype), { + constructor: Ei, + DefaultSettings_: { + endingStart: Fs, + endingEnd: Fs + }, + intervalChanged_: function(t, e, n) { + var i, r, o = this.parameterPositions, + a = t - 2, + s = t + 1, + c = o[a], + l = o[s]; + if (void 0 === c) switch (this.getSettings_().endingStart) { + case 2401: + a = t, c = 2 * e - n; + break; + case 2402: + c = e + o[a = o.length - 2] - o[a + 1]; + break; + default: + a = t, c = n + } + if (void 0 === l) switch (this.getSettings_().endingEnd) { + case 2401: + s = t, l = 2 * n - e; + break; + case 2402: + s = 1, l = n + o[1] - o[0]; + break; + default: + s = t - 1, l = e + } + i = .5 * (n - e), r = this.valueSize, this._weightPrev = i / (e - c), this._weightNext = i / (l - n), this._offsetPrev = a * r, this._offsetNext = s * r + }, + interpolate_: function(t, e, n, i) { + var r, o = this.resultBuffer, + a = this.sampleValues, + s = this.valueSize, + c = t * s, + l = c - s, + u = this._offsetPrev, + h = this._offsetNext, + p = this._weightPrev, + d = this._weightNext, + f = (n - e) / (i - e), + m = f * f, + g = m * f, + v = -p * g + 2 * p * m - p * f, + y = (1 + p) * g + (-1.5 - 2 * p) * m + (-.5 + p) * f + 1, + x = (-1 - d) * g + (1.5 + d) * m + .5 * f, + b = d * g - d * m; + for (r = 0; r !== s; ++r) o[r] = v * a[u + r] + y * a[l + r] + x * a[c + r] + b * a[h + r]; + return o + } + }), Ni.prototype = Object.assign(Object.create(Pi.prototype), { + constructor: Ni, + interpolate_: function(t, e, n, i) { + var r, o = this.resultBuffer, + a = this.sampleValues, + s = this.valueSize, + c = t * s, + l = c - s, + u = (n - e) / (i - e), + h = 1 - u; + for (r = 0; r !== s; ++r) o[r] = a[l + r] * h + a[c + r] * u; + return o + } + }), Oi.prototype = Object.assign(Object.create(Pi.prototype), { + constructor: Oi, + interpolate_: function(t) { + return this.copySampleValue_(t - 1) + } + }), Object.assign(Di, { + toJSON: function(t) { + var e, n, i = t.constructor; + return void 0 !== i.toJSON ? e = i.toJSON(t) : (e = { + name: t.name, + times: Zu.convertArray(t.times, Array), + values: Zu.convertArray(t.values, Array) + }, (n = t.getInterpolation()) !== t.DefaultInterpolation && (e.interpolation = n)), e.type = t.ValueTypeName, e + } + }), Object.assign(Di.prototype, { + constructor: Di, + TimeBufferType: Float32Array, + ValueBufferType: Float32Array, + DefaultInterpolation: 2301, + InterpolantFactoryMethodDiscrete: function(t) { + return new Oi(this.times, this.values, this.getValueSize(), t) + }, + InterpolantFactoryMethodLinear: function(t) { + return new Ni(this.times, this.values, this.getValueSize(), t) + }, + InterpolantFactoryMethodSmooth: function(t) { + return new Ei(this.times, this.values, this.getValueSize(), t) + }, + setInterpolation: function(t) { + var e, n; + switch (t) { + case 2300: + e = this.InterpolantFactoryMethodDiscrete; + break; + case 2301: + e = this.InterpolantFactoryMethodLinear; + break; + case 2302: + e = this.InterpolantFactoryMethodSmooth + } + if (void 0 === e) { + if (n = "unsupported interpolation for " + this.ValueTypeName + " keyframe track named " + this.name, void 0 === this.createInterpolant) { + if (t === this.DefaultInterpolation) throw Error(n); + this.setInterpolation(this.DefaultInterpolation) + } + return this + } + return this.createInterpolant = e, this + }, + getInterpolation: function() { + switch (this.createInterpolant) { + case this.InterpolantFactoryMethodDiscrete: + return 2300; + case this.InterpolantFactoryMethodLinear: + return 2301; + case this.InterpolantFactoryMethodSmooth: + return 2302 + } + }, + getValueSize: function() { + return this.values.length / this.times.length + }, + shift: function(t) { + var e, n, i; + if (0 !== t) + for (n = 0, i = (e = this.times).length; n !== i; ++n) e[n] += t; + return this + }, + scale: function(t) { + var e, n, i; + if (1 !== t) + for (n = 0, i = (e = this.times).length; n !== i; ++n) e[n] *= t; + return this + }, + trim: function(t, e) { + for (var n, i = this.times, r = i.length, o = 0, a = r - 1; o !== r && i[o] < t;) ++o; + for (; - 1 !== a && i[a] > e;) --a; + return ++a, 0 === o && a === r || (o >= a && (o = (a = Math.max(a, 1)) - 1), n = this.getValueSize(), this.times = Zu.arraySlice(i, o, a), this.values = Zu.arraySlice(this.values, o * n, a * n)), this + }, + validate: function() { + var t, e, n, i, r, o, a, s, c = 1, + l = this.getValueSize(); + for (l - Math.floor(l) != 0 && (c = 0), t = this.times, e = this.values, 0 === (n = t.length) && (c = 0), i = null, r = 0; r !== n; r++) { + if ("number" == typeof(o = t[r]) && isNaN(o)) { + c = 0; + break + } + if (null !== i && i > o) { + c = 0; + break + } + i = o + } + if (void 0 !== e && Zu.isTypedArray(e)) + for (r = 0, a = e.length; r !== a; ++r) + if (s = e[r], isNaN(s)) { + c = 0; + break + } + return c + }, + optimize: function() { + var t, e, n, i, r, o, a, s, c, l, u = this.times, + h = this.values, + p = this.getValueSize(), + d = 2302 === this.getInterpolation(), + f = 1, + m = u.length - 1; + for (t = 1; t < m; ++t) { + if (e = 0, (n = u[t]) !== u[t + 1] && (1 !== t || n !== n[0])) + if (d) e = 1; + else + for (r = (i = t * p) - p, o = i + p, a = 0; a !== p; ++a) + if ((s = h[i + a]) !== h[r + a] || s !== h[o + a]) { + e = 1; + break + } + if (e) { + if (t !== f) + for (u[f] = u[t], c = t * p, l = f * p, a = 0; a !== p; ++a) h[l + a] = h[c + a]; + ++f + } + } + if (m > 0) { + for (u[f] = u[m], c = m * p, l = f * p, a = 0; a !== p; ++a) h[l + a] = h[c + a]; + ++f + } + return f !== u.length && (this.times = Zu.arraySlice(u, 0, f), this.values = Zu.arraySlice(h, 0, f * p)), this + }, + clone: function() { + var t = Zu.arraySlice(this.times, 0), + e = Zu.arraySlice(this.values, 0), + n = new(0, this.constructor)(this.name, t, e); + return n.createInterpolant = this.createInterpolant, n + } + }), Ii.prototype = Object.assign(Object.create(Di.prototype), { + constructor: Ii, + ValueTypeName: "bool", + ValueBufferType: Array, + DefaultInterpolation: 2300, + InterpolantFactoryMethodLinear: void 0, + InterpolantFactoryMethodSmooth: void 0 + }), zi.prototype = Object.assign(Object.create(Di.prototype), { + constructor: zi, + ValueTypeName: "color" + }), Ri.prototype = Object.assign(Object.create(Di.prototype), { + constructor: Ri, + ValueTypeName: "number" + }), Fi.prototype = Object.assign(Object.create(Pi.prototype), { + constructor: Fi, + interpolate_: function(t, e, i, r) { + var o, a = this.resultBuffer, + s = this.sampleValues, + c = this.valueSize, + l = t * c, + u = (i - e) / (r - e); + for (o = l + c; l !== o; l += 4) n.slerpFlat(a, 0, s, l - c, s, l, u); + return a + } + }), ki.prototype = Object.assign(Object.create(Di.prototype), { + constructor: ki, + ValueTypeName: "quaternion", + DefaultInterpolation: 2301, + InterpolantFactoryMethodLinear: function(t) { + return new Fi(this.times, this.values, this.getValueSize(), t) + }, + InterpolantFactoryMethodSmooth: void 0 + }), Bi.prototype = Object.assign(Object.create(Di.prototype), { + constructor: Bi, + ValueTypeName: "string", + ValueBufferType: Array, + DefaultInterpolation: 2300, + InterpolantFactoryMethodLinear: void 0, + InterpolantFactoryMethodSmooth: void 0 + }), Ui.prototype = Object.assign(Object.create(Di.prototype), { + constructor: Ui, + ValueTypeName: "vector" + }), Object.assign(ji, { + parse: function(t) { + var e, n, i = [], + r = t.tracks, + o = 1 / (t.fps || 1); + for (e = 0, n = r.length; e !== n; ++e) i.push(Vi(r[e]).scale(o)); + return new ji(t.name, t.duration, i) + }, + toJSON: function(t) { + var e, n, i = [], + r = t.tracks, + o = { + name: t.name, + duration: t.duration, + tracks: i, + uuid: t.uuid + }; + for (e = 0, n = r.length; e !== n; ++e) i.push(Di.toJSON(r[e])); + return o + }, + CreateFromMorphTargetSequence: function(t, e, n, i) { + var r, o, a, s, c = e.length, + l = []; + for (r = 0; r < c; r++) a = [], (o = []).push((r + c - 1) % c, r, (r + 1) % c), a.push(0, 1, 0), s = Zu.getKeyframeOrder(o), o = Zu.sortedArray(o, 1, s), a = Zu.sortedArray(a, 1, s), i || 0 !== o[0] || (o.push(c), a.push(a[0])), l.push(new Ri(".morphTargetInfluences[" + e[r].name + "]", o, a).scale(1 / n)); + return new ji(t, -1, l) + }, + findByName: function(t, e) { + var n, i, r = t; + for (Array.isArray(t) || (r = (n = t).geometry && n.geometry.animations || n.animations), i = 0; i < r.length; i++) + if (r[i].name === e) return r[i]; + return null + }, + CreateClipsFromMorphTargetSequences: function(t, e, n) { + var i, r, o, a, s, c, l, u = {}, + h = /^([\w-]*?)([\d]+)$/; + for (i = 0, r = t.length; i < r; i++)(a = (o = t[i]).name.match(h)) && a.length > 1 && ((c = u[s = a[1]]) || (u[s] = c = []), c.push(o)); + for (s in l = [], u) l.push(ji.CreateFromMorphTargetSequence(s, u[s], e, n)); + return l + }, + parseAnimation: function(t, e) { + var n, i, r, o, a, s, c, l, u, h, p, d, f, m, g, v; + if (!t) return null; + for (n = function(t, e, n, i, r) { + var o, a; + 0 !== n.length && (o = [], a = [], Zu.flattenJSON(n, o, a, i), 0 !== o.length && r.push(new t(e, o, a))) + }, i = [], r = t.name || "default", o = t.length || -1, a = t.fps || 30, s = t.hierarchy || [], c = 0; c < s.length; c++) + if ((l = s[c].keys) && 0 !== l.length) + if (l[0].morphTargets) { + for (u = {}, h = 0; h < l.length; h++) + if (l[h].morphTargets) + for (p = 0; p < l[h].morphTargets.length; p++) u[l[h].morphTargets[p]] = -1; + for (d in u) { + for (f = [], m = [], p = 0; p !== l[h].morphTargets.length; ++p) g = l[h], f.push(g.time), m.push(g.morphTarget === d ? 1 : 0); + i.push(new Ri(".morphTargetInfluence[" + d + "]", f, m)) + } + o = u.length * (a || 1) + } else n(Ui, (v = ".bones[" + e[c].name + "]") + ".position", l, "pos", i), n(ki, v + ".quaternion", l, "rot", i), n(Ui, v + ".scale", l, "scl", i); + return 0 === i.length ? null : new ji(r, o, i) + } + }), Object.assign(ji.prototype, { + resetDuration: function() { + var t, e, n, i = 0; + for (t = 0, e = this.tracks.length; t !== e; ++t) n = this.tracks[t], i = Math.max(i, n.times[n.times.length - 1]); + return this.duration = i, this + }, + trim: function() { + for (var t = 0; t < this.tracks.length; t++) this.tracks[t].trim(0, this.duration); + return this + }, + validate: function() { + var t, e = 1; + for (t = 0; t < this.tracks.length; t++) e = e && this.tracks[t].validate(); + return e + }, + optimize: function() { + for (var t = 0; t < this.tracks.length; t++) this.tracks[t].optimize(); + return this + }, + clone: function() { + var t, e = []; + for (t = 0; t < this.tracks.length; t++) e.push(this.tracks[t].clone()); + return new ji(this.name, this.duration, e) + } + }), Ju = { + enabled: 0, + files: {}, + add: function(t, e) { + 0 != this.enabled && (this.files[t] = e) + }, + get: function(t) { + if (0 != this.enabled) return this.files[t] + }, + remove: function(t) { + delete this.files[t] + }, + clear: function() { + this.files = {} + } + }, $u = new Gi, Object.assign(Wi.prototype, { + load: function() {}, + parse: function() {}, + setCrossOrigin: function(t) { + return this.crossOrigin = t, this + }, + setPath: function(t) { + return this.path = t, this + }, + setResourcePath: function(t) { + return this.resourcePath = t, this + } + }), Qu = {}, Hi.prototype = Object.assign(Object.create(Wi.prototype), { + constructor: Hi, + load: function(t, e, n, i) { + var r, o, a, s, c, l, u, h, p, d, f, m, g, v; + if (void 0 === t && (t = ""), void 0 !== this.path && (t = this.path + t), t = this.manager.resolveURL(t), r = this, void 0 !== (o = Ju.get(t))) return r.manager.itemStart(t), setTimeout(function() { + e && e(o), r.manager.itemEnd(t) + }, 0), o; + if (void 0 === Qu[t]) { + if (a = /^data:(.*?)(;base64)?,(.*)$/, s = t.match(a)) { + c = s[1], l = !!s[2], u = s[3], u = decodeURIComponent(u), l && (u = atob(u)); + try { + switch (p = (this.responseType || "").toLowerCase()) { + case "arraybuffer": + case "blob": + for (d = new Uint8Array(u.length), f = 0; f < u.length; f++) d[f] = u.charCodeAt(f); + h = "blob" === p ? new Blob([d.buffer], { + type: c + }) : d.buffer; + break; + case "document": + m = new DOMParser, h = m.parseFromString(u, c); + break; + case "json": + h = JSON.parse(u); + break; + default: + h = u + } + setTimeout(function() { + e && e(h), r.manager.itemEnd(t) + }, 0) + } catch (e) { + setTimeout(function() { + i && i(e), r.manager.itemError(t), r.manager.itemEnd(t) + }, 0) + } + } else { + for (v in Qu[t] = [], Qu[t].push({ + onLoad: e, + onProgress: n, + onError: i + }), (g = new XMLHttpRequest).open("GET", t, 1), g.addEventListener("load", function(e) { + var n, i, o, a, s = this.response; + if (Ju.add(t, s), n = Qu[t], delete Qu[t], 200 === this.status || 0 === this.status) { + for (this.status, i = 0, o = n.length; i < o; i++)(a = n[i]).onLoad && a.onLoad(s); + r.manager.itemEnd(t) + } else { + for (i = 0, o = n.length; i < o; i++)(a = n[i]).onError && a.onError(e); + r.manager.itemError(t), r.manager.itemEnd(t) + } + }, 0), g.addEventListener("progress", function(e) { + var n, i, r, o = Qu[t]; + for (n = 0, i = o.length; n < i; n++)(r = o[n]).onProgress && r.onProgress(e) + }, 0), g.addEventListener("error", function(e) { + var n, i, o, a = Qu[t]; + for (delete Qu[t], n = 0, i = a.length; n < i; n++)(o = a[n]).onError && o.onError(e); + r.manager.itemError(t), r.manager.itemEnd(t) + }, 0), g.addEventListener("abort", function(e) { + var n, i, o, a = Qu[t]; + for (delete Qu[t], n = 0, i = a.length; n < i; n++)(o = a[n]).onError && o.onError(e); + r.manager.itemError(t), r.manager.itemEnd(t) + }, 0), void 0 !== this.responseType && (g.responseType = this.responseType), void 0 !== this.withCredentials && (g.withCredentials = this.withCredentials), g.overrideMimeType && g.overrideMimeType(void 0 !== this.mimeType ? this.mimeType : "text/plain"), this.requestHeader) g.setRequestHeader(v, this.requestHeader[v]); + g.send(null) + } + return r.manager.itemStart(t), g + } + Qu[t].push({ + onLoad: e, + onProgress: n, + onError: i + }) + }, + setResponseType: function(t) { + return this.responseType = t, this + }, + setWithCredentials: function(t) { + return this.withCredentials = t, this + }, + setMimeType: function(t) { + return this.mimeType = t, this + }, + setRequestHeader: function(t) { + return this.requestHeader = t, this + } + }), qi.prototype = Object.assign(Object.create(Wi.prototype), { + constructor: qi, + load: function(t, e, n, i) { + var r = this, + o = new Hi(r.manager); + o.setPath(r.path), o.load(t, function(t) { + e(r.parse(JSON.parse(t))) + }, n, i) + }, + parse: function(t) { + var e, n, i = []; + for (e = 0; e < t.length; e++) n = ji.parse(t[e]), i.push(n); + return i + } + }), Xi.prototype = Object.assign(Object.create(Wi.prototype), { + constructor: Xi, + load: function(t, e, n, i) { + function r(r) { + o.load(t[r], function(t) { + var n = l.parse(t, 1); + u[r] = { + width: n.width, + height: n.height, + format: n.format, + mipmaps: n.mipmaps + }, 6 === (a += 1) && (1 === n.mipmapCount && (h.minFilter = Wa), h.format = n.format, h.needsUpdate = 1, e && e(h)) + }, n, i) + } + var o, a, s, c, l = this, + u = [], + h = new sn; + if (h.image = u, (o = new Hi(this.manager)).setPath(this.path), o.setResponseType("arraybuffer"), Array.isArray(t)) + for (a = 0, s = 0, c = t.length; s < c; ++s) r(s); + else o.load(t, function(t) { + var n, i, r, o = l.parse(t, 1); + if (o.isCubemap) + for (n = o.mipmaps.length / o.mipmapCount, i = 0; i < n; i++) + for (u[i] = { + mipmaps: [] + }, r = 0; r < o.mipmapCount; r++) u[i].mipmaps.push(o.mipmaps[i * o.mipmapCount + r]), u[i].format = o.format, u[i].width = o.width, u[i].height = o.height; + else h.image.width = o.width, h.image.height = o.height, h.mipmaps = o.mipmaps; + 1 === o.mipmapCount && (h.minFilter = Wa), h.format = o.format, h.needsUpdate = 1, e && e(h) + }, n, i); + return h + } + }), Yi.prototype = Object.assign(Object.create(Wi.prototype), { + constructor: Yi, + load: function(t, e, n, i) { + var r = this, + o = new J, + a = new Hi(this.manager); + return a.setResponseType("arraybuffer"), a.setPath(this.path), a.load(t, function(t) { + var n = r.parse(t); + n && (void 0 !== n.image ? o.image = n.image : void 0 !== n.data && (o.image.width = n.width, o.image.height = n.height, o.image.data = n.data), o.wrapS = void 0 !== n.wrapS ? n.wrapS : Ba, o.wrapT = void 0 !== n.wrapT ? n.wrapT : Ba, o.magFilter = void 0 !== n.magFilter ? n.magFilter : Wa, o.minFilter = void 0 !== n.minFilter ? n.minFilter : qa, o.anisotropy = void 0 !== n.anisotropy ? n.anisotropy : 1, void 0 !== n.format && (o.format = n.format), void 0 !== n.type && (o.type = n.type), void 0 !== n.mipmaps && (o.mipmaps = n.mipmaps), 1 === n.mipmapCount && (o.minFilter = Wa), o.needsUpdate = 1, e && e(o, n)) + }, n, i), o + } + }), Zi.prototype = Object.assign(Object.create(Wi.prototype), { + constructor: Zi, + load: function(t, e, n, i) { + function r() { + c.removeEventListener("load", r, 0), c.removeEventListener("error", o, 0), Ju.add(t, this), e && e(this), a.manager.itemEnd(t) + } + + function o(e) { + c.removeEventListener("load", r, 0), c.removeEventListener("error", o, 0), i && i(e), a.manager.itemError(t), a.manager.itemEnd(t) + } + var a, s, c; + return void 0 !== this.path && (t = this.path + t), t = this.manager.resolveURL(t), a = this, void 0 !== (s = Ju.get(t)) ? (a.manager.itemStart(t), setTimeout(function() { + e && e(s), a.manager.itemEnd(t) + }, 0), s) : ((c = document.createElementNS("http://www.w3.org/1999/xhtml", "img")).addEventListener("load", r, 0), c.addEventListener("error", o, 0), "data:" !== t.substr(0, 5) && void 0 !== this.crossOrigin && (c.crossOrigin = this.crossOrigin), a.manager.itemStart(t), c.src = t, c) + } + }), Ji.prototype = Object.assign(Object.create(Wi.prototype), { + constructor: Ji, + load: function(t, e, n, i) { + function r(n) { + c.load(t[n], function(t) { + s.images[n] = t, 6 == ++o && (s.needsUpdate = 1, e && e(s)) + }, void 0, i) + } + var o, a, s = new ft, + c = new Zi(this.manager); + for (c.setCrossOrigin(this.crossOrigin), c.setPath(this.path), o = 0, a = 0; a < t.length; ++a) r(a); + return s + } + }), $i.prototype = Object.assign(Object.create(Wi.prototype), { + constructor: $i, + load: function(t, e, n, i) { + var r = new o, + a = new Zi(this.manager); + return a.setCrossOrigin(this.crossOrigin), a.setPath(this.path), a.load(t, function(n) { + r.image = n; + var i = t.search(/\.jpe?g($|\?)/i) > 0 || 0 === t.search(/^data\:image\/jpeg/); + r.format = i ? as : ss, r.needsUpdate = 1, void 0 !== e && e(r) + }, n, i), r + } + }), Object.assign(Qi.prototype, { + getPoint: function() { + return null + }, + getPointAt: function(t, e) { + var n = this.getUtoTmapping(t); + return this.getPoint(n, e) + }, + getPoints: function(t) { + var e, n; + for (void 0 === t && (t = 5), e = [], n = 0; n <= t; n++) e.push(this.getPoint(n / t)); + return e + }, + getSpacedPoints: function(t) { + var e, n; + for (void 0 === t && (t = 5), e = [], n = 0; n <= t; n++) e.push(this.getPointAt(n / t)); + return e + }, + getLength: function() { + var t = this.getLengths(); + return t[t.length - 1] + }, + getLengths: function(t) { + var e, n, i, r, o; + if (void 0 === t && (t = this.arcLengthDivisions), this.cacheArcLengths && this.cacheArcLengths.length === t + 1 && !this.needsUpdate) return this.cacheArcLengths; + for (this.needsUpdate = 0, e = [], i = this.getPoint(0), o = 0, e.push(0), r = 1; r <= t; r++) o += (n = this.getPoint(r / t)).distanceTo(i), e.push(o), i = n; + return this.cacheArcLengths = e, e + }, + updateArcLengths: function() { + this.needsUpdate = 1, this.getLengths() + }, + getUtoTmapping: function(t, e) { + var n, i, r, o, a, s = this.getLengths(), + c = 0, + l = s.length; + for (n = e || t * s[l - 1], i = 0, r = l - 1; i <= r;) + if ((o = s[c = Math.floor(i + (r - i) / 2)] - n) < 0) i = c + 1; + else { + if (!(o > 0)) { + r = c; + break + } + r = c - 1 + } + return s[c = r] === n ? c / (l - 1) : (c + (n - (a = s[c])) / (s[c + 1] - a)) / (l - 1) + }, + getTangent: function(t) { + var e, n = t - 1e-4, + i = t + 1e-4; + return n < 0 && (n = 0), i > 1 && (i = 1), e = this.getPoint(n), this.getPoint(i).clone().sub(e).normalize() + }, + getTangentAt: function(t) { + var e = this.getUtoTmapping(t); + return this.getTangent(e) + }, + computeFrenetFrames: function(t, e) { + var n, r, o, a, s, c, u, h = new i, + p = [], + d = [], + f = [], + m = new i, + g = new l; + for (n = 0; n <= t; n++) r = n / t, p[n] = this.getTangentAt(r), p[n].normalize(); + for (d[0] = new i, f[0] = new i, a = Number.MAX_VALUE, s = Math.abs(p[0].x), c = Math.abs(p[0].y), u = Math.abs(p[0].z), s <= a && (a = s, h.set(1, 0, 0)), c <= a && (a = c, h.set(0, 1, 0)), u <= a && h.set(0, 0, 1), m.crossVectors(p[0], h).normalize(), d[0].crossVectors(p[0], m), f[0].crossVectors(p[0], d[0]), n = 1; n <= t; n++) d[n] = d[n - 1].clone(), f[n] = f[n - 1].clone(), m.crossVectors(p[n - 1], p[n]), m.length() > Number.EPSILON && (m.normalize(), o = Math.acos(ic.clamp(p[n - 1].dot(p[n]), -1, 1)), d[n].applyMatrix4(g.makeRotationAxis(m, o))), f[n].crossVectors(p[n], d[n]); + if (1 == e) + for (o = Math.acos(ic.clamp(d[0].dot(d[t]), -1, 1)), o /= t, p[0].dot(m.crossVectors(d[0], d[t])) > 0 && (o = -o), n = 1; n <= t; n++) d[n].applyMatrix4(g.makeRotationAxis(p[n], o * n)), f[n].crossVectors(p[n], d[n]); + return { + tangents: p, + normals: d, + binormals: f + } + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + return this.arcLengthDivisions = t.arcLengthDivisions, this + }, + toJSON: function() { + var t = { + metadata: { + version: 4.5, + type: "Curve", + generator: "Curve.toJSON" + } + }; + return t.arcLengthDivisions = this.arcLengthDivisions, t.type = this.type, t + }, + fromJSON: function(t) { + return this.arcLengthDivisions = t.arcLengthDivisions, this + } + }), Ki.prototype = Object.create(Qi.prototype), Ki.prototype.constructor = Ki, Ki.prototype.isEllipseCurve = 1, Ki.prototype.getPoint = function(t, n) { + for (var i, r, o, a, s, c, l, u = n || new e, h = 2 * Math.PI, p = this.aEndAngle - this.aStartAngle, d = Math.abs(p) < Number.EPSILON; p < 0;) p += h; + for (; p > h;) p -= h; + return p < Number.EPSILON && (p = d ? 0 : h), 1 != this.aClockwise || d || (p === h ? p = -h : p -= h), i = this.aStartAngle + t * p, r = this.aX + this.xRadius * Math.cos(i), o = this.aY + this.yRadius * Math.sin(i), 0 !== this.aRotation && (a = Math.cos(this.aRotation), s = Math.sin(this.aRotation), r = (c = r - this.aX) * a - (l = o - this.aY) * s + this.aX, o = c * s + l * a + this.aY), u.set(r, o) + }, Ki.prototype.copy = function(t) { + return Qi.prototype.copy.call(this, t), this.aX = t.aX, this.aY = t.aY, this.xRadius = t.xRadius, this.yRadius = t.yRadius, this.aStartAngle = t.aStartAngle, this.aEndAngle = t.aEndAngle, this.aClockwise = t.aClockwise, this.aRotation = t.aRotation, this + }, Ki.prototype.toJSON = function() { + var t = Qi.prototype.toJSON.call(this); + return t.aX = this.aX, t.aY = this.aY, t.xRadius = this.xRadius, t.yRadius = this.yRadius, t.aStartAngle = this.aStartAngle, t.aEndAngle = this.aEndAngle, t.aClockwise = this.aClockwise, t.aRotation = this.aRotation, t + }, Ki.prototype.fromJSON = function(t) { + return Qi.prototype.fromJSON.call(this, t), this.aX = t.aX, this.aY = t.aY, this.xRadius = t.xRadius, this.yRadius = t.yRadius, this.aStartAngle = t.aStartAngle, this.aEndAngle = t.aEndAngle, this.aClockwise = t.aClockwise, this.aRotation = t.aRotation, this + }, tr.prototype = Object.create(Ki.prototype), tr.prototype.constructor = tr, tr.prototype.isArcCurve = 1, Ku = new i, th = new er, eh = new er, nh = new er, nr.prototype = Object.create(Qi.prototype), nr.prototype.constructor = nr, nr.prototype.isCatmullRomCurve3 = 1, nr.prototype.getPoint = function(t, e) { + var n, r, o, a, s, c, l, u, h = e || new i, + p = this.points, + d = p.length, + f = (d - (this.closed ? 0 : 1)) * t, + m = Math.floor(f), + g = f - m; + return this.closed ? m += m > 0 ? 0 : (Math.floor(Math.abs(m) / d) + 1) * d : 0 === g && m === d - 1 && (m = d - 2, g = 1), this.closed || m > 0 ? n = p[(m - 1) % d] : (Ku.subVectors(p[0], p[1]).add(p[0]), n = Ku), r = p[m % d], o = p[(m + 1) % d], this.closed || m + 2 < d ? a = p[(m + 2) % d] : (Ku.subVectors(p[d - 1], p[d - 2]).add(p[d - 1]), a = Ku), "centripetal" === this.curveType || "chordal" === this.curveType ? (s = "chordal" === this.curveType ? .5 : .25, c = Math.pow(n.distanceToSquared(r), s), (l = Math.pow(r.distanceToSquared(o), s)) < 1e-4 && (l = 1), c < 1e-4 && (c = l), (u = Math.pow(o.distanceToSquared(a), s)) < 1e-4 && (u = l), th.initNonuniformCatmullRom(n.x, r.x, o.x, a.x, c, l, u), eh.initNonuniformCatmullRom(n.y, r.y, o.y, a.y, c, l, u), nh.initNonuniformCatmullRom(n.z, r.z, o.z, a.z, c, l, u)) : "catmullrom" === this.curveType && (th.initCatmullRom(n.x, r.x, o.x, a.x, this.tension), eh.initCatmullRom(n.y, r.y, o.y, a.y, this.tension), nh.initCatmullRom(n.z, r.z, o.z, a.z, this.tension)), h.set(th.calc(g), eh.calc(g), nh.calc(g)), h + }, nr.prototype.copy = function(t) { + var e, n, i; + for (Qi.prototype.copy.call(this, t), this.points = [], e = 0, n = t.points.length; e < n; e++) i = t.points[e], this.points.push(i.clone()); + return this.closed = t.closed, this.curveType = t.curveType, this.tension = t.tension, this + }, nr.prototype.toJSON = function() { + var t, e, n, i = Qi.prototype.toJSON.call(this); + for (i.points = [], t = 0, e = this.points.length; t < e; t++) n = this.points[t], i.points.push(n.toArray()); + return i.closed = this.closed, i.curveType = this.curveType, i.tension = this.tension, i + }, nr.prototype.fromJSON = function(t) { + var e, n, r; + for (Qi.prototype.fromJSON.call(this, t), this.points = [], e = 0, n = t.points.length; e < n; e++) r = t.points[e], this.points.push((new i).fromArray(r)); + return this.closed = t.closed, this.curveType = t.curveType, this.tension = t.tension, this + }, ar.prototype = Object.create(Qi.prototype), ar.prototype.constructor = ar, ar.prototype.isCubicBezierCurve = 1, ar.prototype.getPoint = function(t, n) { + var i = n || new e, + r = this.v0, + o = this.v1, + a = this.v2, + s = this.v3; + return i.set(or(t, r.x, o.x, a.x, s.x), or(t, r.y, o.y, a.y, s.y)), i + }, ar.prototype.copy = function(t) { + return Qi.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this.v3.copy(t.v3), this + }, ar.prototype.toJSON = function() { + var t = Qi.prototype.toJSON.call(this); + return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t.v3 = this.v3.toArray(), t + }, ar.prototype.fromJSON = function(t) { + return Qi.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this.v3.fromArray(t.v3), this + }, sr.prototype = Object.create(Qi.prototype), sr.prototype.constructor = sr, sr.prototype.isCubicBezierCurve3 = 1, sr.prototype.getPoint = function(t, e) { + var n = e || new i, + r = this.v0, + o = this.v1, + a = this.v2, + s = this.v3; + return n.set(or(t, r.x, o.x, a.x, s.x), or(t, r.y, o.y, a.y, s.y), or(t, r.z, o.z, a.z, s.z)), n + }, sr.prototype.copy = function(t) { + return Qi.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this.v3.copy(t.v3), this + }, sr.prototype.toJSON = function() { + var t = Qi.prototype.toJSON.call(this); + return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t.v3 = this.v3.toArray(), t + }, sr.prototype.fromJSON = function(t) { + return Qi.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this.v3.fromArray(t.v3), this + }, cr.prototype = Object.create(Qi.prototype), cr.prototype.constructor = cr, cr.prototype.isLineCurve = 1, cr.prototype.getPoint = function(t, n) { + var i = n || new e; + return 1 === t ? i.copy(this.v2) : (i.copy(this.v2).sub(this.v1), i.multiplyScalar(t).add(this.v1)), i + }, cr.prototype.getPointAt = function(t, e) { + return this.getPoint(t, e) + }, cr.prototype.getTangent = function() { + return this.v2.clone().sub(this.v1).normalize() + }, cr.prototype.copy = function(t) { + return Qi.prototype.copy.call(this, t), this.v1.copy(t.v1), this.v2.copy(t.v2), this + }, cr.prototype.toJSON = function() { + var t = Qi.prototype.toJSON.call(this); + return t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t + }, cr.prototype.fromJSON = function(t) { + return Qi.prototype.fromJSON.call(this, t), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this + }, lr.prototype = Object.create(Qi.prototype), lr.prototype.constructor = lr, lr.prototype.isLineCurve3 = 1, lr.prototype.getPoint = function(t, e) { + var n = e || new i; + return 1 === t ? n.copy(this.v2) : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(t).add(this.v1)), n + }, lr.prototype.getPointAt = function(t, e) { + return this.getPoint(t, e) + }, lr.prototype.copy = function(t) { + return Qi.prototype.copy.call(this, t), this.v1.copy(t.v1), this.v2.copy(t.v2), this + }, lr.prototype.toJSON = function() { + var t = Qi.prototype.toJSON.call(this); + return t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t + }, lr.prototype.fromJSON = function(t) { + return Qi.prototype.fromJSON.call(this, t), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this + }, ur.prototype = Object.create(Qi.prototype), ur.prototype.constructor = ur, ur.prototype.isQuadraticBezierCurve = 1, ur.prototype.getPoint = function(t, n) { + var i = n || new e, + r = this.v0, + o = this.v1, + a = this.v2; + return i.set(rr(t, r.x, o.x, a.x), rr(t, r.y, o.y, a.y)), i + }, ur.prototype.copy = function(t) { + return Qi.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this + }, ur.prototype.toJSON = function() { + var t = Qi.prototype.toJSON.call(this); + return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t + }, ur.prototype.fromJSON = function(t) { + return Qi.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this + }, hr.prototype = Object.create(Qi.prototype), hr.prototype.constructor = hr, hr.prototype.isQuadraticBezierCurve3 = 1, hr.prototype.getPoint = function(t, e) { + var n = e || new i, + r = this.v0, + o = this.v1, + a = this.v2; + return n.set(rr(t, r.x, o.x, a.x), rr(t, r.y, o.y, a.y), rr(t, r.z, o.z, a.z)), n + }, hr.prototype.copy = function(t) { + return Qi.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this + }, hr.prototype.toJSON = function() { + var t = Qi.prototype.toJSON.call(this); + return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t + }, hr.prototype.fromJSON = function(t) { + return Qi.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this + }, pr.prototype = Object.create(Qi.prototype), pr.prototype.constructor = pr, pr.prototype.isSplineCurve = 1, pr.prototype.getPoint = function(t, n) { + var i = n || new e, + r = this.points, + o = (r.length - 1) * t, + a = Math.floor(o), + s = o - a, + c = r[0 === a ? a : a - 1], + l = r[a], + u = r[a > r.length - 2 ? r.length - 1 : a + 1], + h = r[a > r.length - 3 ? r.length - 1 : a + 2]; + return i.set(ir(s, c.x, l.x, u.x, h.x), ir(s, c.y, l.y, u.y, h.y)), i + }, pr.prototype.copy = function(t) { + var e, n, i; + for (Qi.prototype.copy.call(this, t), this.points = [], e = 0, n = t.points.length; e < n; e++) i = t.points[e], this.points.push(i.clone()); + return this + }, pr.prototype.toJSON = function() { + var t, e, n, i = Qi.prototype.toJSON.call(this); + for (i.points = [], t = 0, e = this.points.length; t < e; t++) n = this.points[t], i.points.push(n.toArray()); + return i + }, pr.prototype.fromJSON = function(t) { + var n, i, r; + for (Qi.prototype.fromJSON.call(this, t), this.points = [], n = 0, i = t.points.length; n < i; n++) r = t.points[n], this.points.push((new e).fromArray(r)); + return this + }, ih = Object.freeze({ + ArcCurve: tr, + CatmullRomCurve3: nr, + CubicBezierCurve: ar, + CubicBezierCurve3: sr, + EllipseCurve: Ki, + LineCurve: cr, + LineCurve3: lr, + QuadraticBezierCurve: ur, + QuadraticBezierCurve3: hr, + SplineCurve: pr + }), dr.prototype = Object.assign(Object.create(Qi.prototype), { + constructor: dr, + add: function(t) { + this.curves.push(t) + }, + closePath: function() { + var t = this.curves[0].getPoint(0), + e = this.curves[this.curves.length - 1].getPoint(1); + t.equals(e) || this.curves.push(new cr(e, t)) + }, + getPoint: function(t) { + for (var e, n, i, r, o = t * this.getLength(), a = this.getCurveLengths(), s = 0; s < a.length;) { + if (a[s] >= o) return e = a[s] - o, r = 0 === (i = (n = this.curves[s]).getLength()) ? 0 : 1 - e / i, n.getPointAt(r); + s++ + } + return null + }, + getLength: function() { + var t = this.getCurveLengths(); + return t[t.length - 1] + }, + updateArcLengths: function() { + this.needsUpdate = 1, this.cacheLengths = null, this.getCurveLengths() + }, + getCurveLengths: function() { + var t, e, n, i; + if (this.cacheLengths && this.cacheLengths.length === this.curves.length) return this.cacheLengths; + for (t = [], e = 0, n = 0, i = this.curves.length; n < i; n++) e += this.curves[n].getLength(), t.push(e); + return this.cacheLengths = t, t + }, + getSpacedPoints: function(t) { + var e, n; + for (void 0 === t && (t = 40), e = [], n = 0; n <= t; n++) e.push(this.getPoint(n / t)); + return this.autoClose && e.push(e[0]), e + }, + getPoints: function(t) { + var e, n, i, r, o, a, s, c, l; + for (t = t || 12, e = [], i = 0, r = this.curves; i < r.length; i++) + for (a = (o = r[i]) && o.isEllipseCurve ? 2 * t : o && (o.isLineCurve || o.isLineCurve3) ? 1 : o && o.isSplineCurve ? t * o.points.length : t, s = o.getPoints(a), c = 0; c < s.length; c++) l = s[c], n && n.equals(l) || (e.push(l), n = l); + return this.autoClose && e.length > 1 && !e[e.length - 1].equals(e[0]) && e.push(e[0]), e + }, + copy: function(t) { + var e, n, i; + for (Qi.prototype.copy.call(this, t), this.curves = [], e = 0, n = t.curves.length; e < n; e++) i = t.curves[e], this.curves.push(i.clone()); + return this.autoClose = t.autoClose, this + }, + toJSON: function() { + var t, e, n, i = Qi.prototype.toJSON.call(this); + for (i.autoClose = this.autoClose, i.curves = [], t = 0, e = this.curves.length; t < e; t++) n = this.curves[t], i.curves.push(n.toJSON()); + return i + }, + fromJSON: function(t) { + var e, n, i; + for (Qi.prototype.fromJSON.call(this, t), this.autoClose = t.autoClose, this.curves = [], e = 0, n = t.curves.length; e < n; e++) i = t.curves[e], this.curves.push((new ih[i.type]).fromJSON(i)); + return this + } + }), fr.prototype = Object.assign(Object.create(dr.prototype), { + constructor: fr, + setFromPoints: function(t) { + this.moveTo(t[0].x, t[0].y); + for (var e = 1, n = t.length; e < n; e++) this.lineTo(t[e].x, t[e].y) + }, + moveTo: function(t, e) { + this.currentPoint.set(t, e) + }, + lineTo: function(t, n) { + var i = new cr(this.currentPoint.clone(), new e(t, n)); + this.curves.push(i), this.currentPoint.set(t, n) + }, + quadraticCurveTo: function(t, n, i, r) { + var o = new ur(this.currentPoint.clone(), new e(t, n), new e(i, r)); + this.curves.push(o), this.currentPoint.set(i, r) + }, + bezierCurveTo: function(t, n, i, r, o, a) { + var s = new ar(this.currentPoint.clone(), new e(t, n), new e(i, r), new e(o, a)); + this.curves.push(s), this.currentPoint.set(o, a) + }, + splineThru: function(t) { + var e = new pr([this.currentPoint.clone()].concat(t)); + this.curves.push(e), this.currentPoint.copy(t[t.length - 1]) + }, + arc: function(t, e, n, i, r, o) { + var a = this.currentPoint.x, + s = this.currentPoint.y; + this.absarc(t + a, e + s, n, i, r, o) + }, + absarc: function(t, e, n, i, r, o) { + this.absellipse(t, e, n, n, i, r, o) + }, + ellipse: function(t, e, n, i, r, o, a, s) { + var c = this.currentPoint.x, + l = this.currentPoint.y; + this.absellipse(t + c, e + l, n, i, r, o, a, s) + }, + absellipse: function(t, e, n, i, r, o, a, s) { + var c, l, u = new Ki(t, e, n, i, r, o, a, s); + this.curves.length > 0 && ((c = u.getPoint(0)).equals(this.currentPoint) || this.lineTo(c.x, c.y)), this.curves.push(u), l = u.getPoint(1), this.currentPoint.copy(l) + }, + copy: function(t) { + return dr.prototype.copy.call(this, t), this.currentPoint.copy(t.currentPoint), this + }, + toJSON: function() { + var t = dr.prototype.toJSON.call(this); + return t.currentPoint = this.currentPoint.toArray(), t + }, + fromJSON: function(t) { + return dr.prototype.fromJSON.call(this, t), this.currentPoint.fromArray(t.currentPoint), this + } + }), mr.prototype = Object.assign(Object.create(fr.prototype), { + constructor: mr, + getPointsHoles: function(t) { + var e, n, i = []; + for (e = 0, n = this.holes.length; e < n; e++) i[e] = this.holes[e].getPoints(t); + return i + }, + extractPoints: function(t) { + return { + shape: this.getPoints(t), + holes: this.getPointsHoles(t) + } + }, + copy: function(t) { + var e, n, i; + for (fr.prototype.copy.call(this, t), this.holes = [], e = 0, n = t.holes.length; e < n; e++) i = t.holes[e], this.holes.push(i.clone()); + return this + }, + toJSON: function() { + var t, e, n, i = fr.prototype.toJSON.call(this); + for (i.uuid = this.uuid, i.holes = [], t = 0, e = this.holes.length; t < e; t++) n = this.holes[t], i.holes.push(n.toJSON()); + return i + }, + fromJSON: function(t) { + var e, n, i; + for (fr.prototype.fromJSON.call(this, t), this.uuid = t.uuid, this.holes = [], e = 0, n = t.holes.length; e < n; e++) i = t.holes[e], this.holes.push((new fr).fromJSON(i)); + return this + } + }), gr.prototype = Object.assign(Object.create(p.prototype), { + constructor: gr, + isLight: 1, + copy: function(t) { + return p.prototype.copy.call(this, t), this.color.copy(t.color), this.intensity = t.intensity, this + }, + toJSON: function(t) { + var e = p.prototype.toJSON.call(this, t); + return e.object.color = this.color.getHex(), e.object.intensity = this.intensity, void 0 !== this.groundColor && (e.object.groundColor = this.groundColor.getHex()), void 0 !== this.distance && (e.object.distance = this.distance), void 0 !== this.angle && (e.object.angle = this.angle), void 0 !== this.decay && (e.object.decay = this.decay), void 0 !== this.penumbra && (e.object.penumbra = this.penumbra), void 0 !== this.shadow && (e.object.shadow = this.shadow.toJSON()), e + } + }), vr.prototype = Object.assign(Object.create(gr.prototype), { + constructor: vr, + isHemisphereLight: 1, + copy: function(t) { + return gr.prototype.copy.call(this, t), this.groundColor.copy(t.groundColor), this + } + }), Object.assign(yr.prototype, { + _projScreenMatrix: new l, + _lightPositionWorld: new i, + _lookTarget: new i, + getViewportCount: function() { + return this._viewportCount + }, + getFrustum: function() { + return this._frustum + }, + updateMatrices: function(t) { + var e = this.camera, + n = this.matrix, + i = this._projScreenMatrix, + r = this._lookTarget, + o = this._lightPositionWorld; + o.setFromMatrixPosition(t.matrixWorld), e.position.copy(o), r.setFromMatrixPosition(t.target.matrixWorld), e.lookAt(r), e.updateMatrixWorld(), i.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), this._frustum.setFromMatrix(i), n.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), n.multiply(e.projectionMatrix), n.multiply(e.matrixWorldInverse) + }, + getViewport: function(t) { + return this._viewports[t] + }, + getFrameExtents: function() { + return this._frameExtents + }, + copy: function(t) { + return this.camera = t.camera.clone(), this.bias = t.bias, this.radius = t.radius, this.mapSize.copy(t.mapSize), this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + toJSON: function() { + var t = {}; + return 0 !== this.bias && (t.bias = this.bias), 1 !== this.radius && (t.radius = this.radius), 512 === this.mapSize.x && 512 === this.mapSize.y || (t.mapSize = this.mapSize.toArray()), t.camera = this.camera.toJSON(0).object, delete t.camera.matrix, t + } + }), xr.prototype = Object.assign(Object.create(yr.prototype), { + constructor: xr, + isSpotLightShadow: 1, + updateMatrices: function(t, e, n) { + var i = this.camera, + r = 2 * ic.RAD2DEG * t.angle, + o = this.mapSize.width / this.mapSize.height, + a = t.distance || i.far; + r === i.fov && o === i.aspect && a === i.far || (i.fov = r, i.aspect = o, i.far = a, i.updateProjectionMatrix()), yr.prototype.updateMatrices.call(this, t, e, n) + } + }), br.prototype = Object.assign(Object.create(gr.prototype), { + constructor: br, + isSpotLight: 1, + copy: function(t) { + return gr.prototype.copy.call(this, t), this.distance = t.distance, this.angle = t.angle, this.penumbra = t.penumbra, this.decay = t.decay, this.target = t.target.clone(), this.shadow = t.shadow.clone(), this + } + }), _r.prototype = Object.assign(Object.create(yr.prototype), { + constructor: _r, + isPointLightShadow: 1, + updateMatrices: function(t, e, n) { + var i = this.camera, + r = this.matrix, + o = this._lightPositionWorld, + a = this._lookTarget, + s = this._projScreenMatrix; + o.setFromMatrixPosition(t.matrixWorld), i.position.copy(o), a.copy(i.position), a.add(this._cubeDirections[n]), i.up.copy(this._cubeUps[n]), i.lookAt(a), i.updateMatrixWorld(), r.makeTranslation(-o.x, -o.y, -o.z), s.multiplyMatrices(i.projectionMatrix, i.matrixWorldInverse), this._frustum.setFromMatrix(s) + } + }), wr.prototype = Object.assign(Object.create(gr.prototype), { + constructor: wr, + isPointLight: 1, + copy: function(t) { + return gr.prototype.copy.call(this, t), this.distance = t.distance, this.decay = t.decay, this.shadow = t.shadow.clone(), this + } + }), Mr.prototype = Object.assign(Object.create(q.prototype), { + constructor: Mr, + isOrthographicCamera: 1, + copy: function(t, e) { + return q.prototype.copy.call(this, t, e), this.left = t.left, this.right = t.right, this.top = t.top, this.bottom = t.bottom, this.near = t.near, this.far = t.far, this.zoom = t.zoom, this.view = null === t.view ? null : Object.assign({}, t.view), this + }, + setViewOffset: function(t, e, n, i, r, o) { + null === this.view && (this.view = { + enabled: 1, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }), this.view.enabled = 1, this.view.fullWidth = t, this.view.fullHeight = e, this.view.offsetX = n, this.view.offsetY = i, this.view.width = r, this.view.height = o, this.updateProjectionMatrix() + }, + clearViewOffset: function() { + null !== this.view && (this.view.enabled = 0), this.updateProjectionMatrix() + }, + updateProjectionMatrix: function() { + var t, e, n, i, r = (this.right - this.left) / (2 * this.zoom), + o = (this.top - this.bottom) / (2 * this.zoom), + a = (this.right + this.left) / 2, + s = (this.top + this.bottom) / 2, + c = a - r, + l = a + r, + u = s + o, + h = s - o; + null !== this.view && this.view.enabled && (t = this.zoom / (this.view.width / this.view.fullWidth), e = this.zoom / (this.view.height / this.view.fullHeight), n = (this.right - this.left) / this.view.width, i = (this.top - this.bottom) / this.view.height, l = (c += n * (this.view.offsetX / t)) + n * (this.view.width / t), h = (u -= i * (this.view.offsetY / e)) - i * (this.view.height / e)), this.projectionMatrix.makeOrthographic(c, l, u, h, this.near, this.far), this.projectionMatrixInverse.getInverse(this.projectionMatrix) + }, + toJSON: function(t) { + var e = p.prototype.toJSON.call(this, t); + return e.object.zoom = this.zoom, e.object.left = this.left, e.object.right = this.right, e.object.top = this.top, e.object.bottom = this.bottom, e.object.near = this.near, e.object.far = this.far, null !== this.view && (e.object.view = Object.assign({}, this.view)), e + } + }), Sr.prototype = Object.assign(Object.create(yr.prototype), { + constructor: Sr, + isDirectionalLightShadow: 1, + updateMatrices: function(t, e, n) { + yr.prototype.updateMatrices.call(this, t, e, n) + } + }), Tr.prototype = Object.assign(Object.create(gr.prototype), { + constructor: Tr, + isDirectionalLight: 1, + copy: function(t) { + return gr.prototype.copy.call(this, t), this.target = t.target.clone(), this.shadow = t.shadow.clone(), this + } + }), Ar.prototype = Object.assign(Object.create(gr.prototype), { + constructor: Ar, + isAmbientLight: 1 + }), Lr.prototype = Object.assign(Object.create(gr.prototype), { + constructor: Lr, + isRectAreaLight: 1, + copy: function(t) { + return gr.prototype.copy.call(this, t), this.width = t.width, this.height = t.height, this + }, + toJSON: function(t) { + var e = gr.prototype.toJSON.call(this, t); + return e.object.width = this.width, e.object.height = this.height, e + } + }), Cr.prototype = Object.assign(Object.create(Wi.prototype), { + constructor: Cr, + load: function(t, e, n, i) { + var r = this, + o = new Hi(r.manager); + o.setPath(r.path), o.load(t, function(t) { + e(r.parse(JSON.parse(t))) + }, n, i) + }, + parse: function(t) { + function n(t) { + return h[t], h[t] + } + var o, s, c, u, h = this.textures, + p = new Yu[t.type]; + if (void 0 !== t.uuid && (p.uuid = t.uuid), void 0 !== t.name && (p.name = t.name), void 0 !== t.color && p.color.setHex(t.color), void 0 !== t.roughness && (p.roughness = t.roughness), void 0 !== t.metalness && (p.metalness = t.metalness), void 0 !== t.sheen && (p.sheen = (new x).setHex(t.sheen)), void 0 !== t.emissive && p.emissive.setHex(t.emissive), void 0 !== t.specular && p.specular.setHex(t.specular), void 0 !== t.shininess && (p.shininess = t.shininess), void 0 !== t.clearcoat && (p.clearcoat = t.clearcoat), void 0 !== t.clearcoatRoughness && (p.clearcoatRoughness = t.clearcoatRoughness), void 0 !== t.vertexColors && (p.vertexColors = t.vertexColors), void 0 !== t.fog && (p.fog = t.fog), void 0 !== t.flatShading && (p.flatShading = t.flatShading), void 0 !== t.blending && (p.blending = t.blending), void 0 !== t.combine && (p.combine = t.combine), void 0 !== t.side && (p.side = t.side), void 0 !== t.opacity && (p.opacity = t.opacity), void 0 !== t.transparent && (p.transparent = t.transparent), void 0 !== t.alphaTest && (p.alphaTest = t.alphaTest), void 0 !== t.depthTest && (p.depthTest = t.depthTest), void 0 !== t.depthWrite && (p.depthWrite = t.depthWrite), void 0 !== t.colorWrite && (p.colorWrite = t.colorWrite), void 0 !== t.stencilWrite && (p.stencilWrite = t.stencilWrite), void 0 !== t.stencilWriteMask && (p.stencilWriteMask = t.stencilWriteMask), void 0 !== t.stencilFunc && (p.stencilFunc = t.stencilFunc), void 0 !== t.stencilRef && (p.stencilRef = t.stencilRef), void 0 !== t.stencilFuncMask && (p.stencilFuncMask = t.stencilFuncMask), void 0 !== t.stencilFail && (p.stencilFail = t.stencilFail), void 0 !== t.stencilZFail && (p.stencilZFail = t.stencilZFail), void 0 !== t.stencilZPass && (p.stencilZPass = t.stencilZPass), void 0 !== t.wireframe && (p.wireframe = t.wireframe), void 0 !== t.wireframeLinewidth && (p.wireframeLinewidth = t.wireframeLinewidth), void 0 !== t.wireframeLinecap && (p.wireframeLinecap = t.wireframeLinecap), void 0 !== t.wireframeLinejoin && (p.wireframeLinejoin = t.wireframeLinejoin), void 0 !== t.rotation && (p.rotation = t.rotation), 1 !== t.linewidth && (p.linewidth = t.linewidth), void 0 !== t.dashSize && (p.dashSize = t.dashSize), void 0 !== t.gapSize && (p.gapSize = t.gapSize), void 0 !== t.scale && (p.scale = t.scale), void 0 !== t.polygonOffset && (p.polygonOffset = t.polygonOffset), void 0 !== t.polygonOffsetFactor && (p.polygonOffsetFactor = t.polygonOffsetFactor), void 0 !== t.polygonOffsetUnits && (p.polygonOffsetUnits = t.polygonOffsetUnits), void 0 !== t.skinning && (p.skinning = t.skinning), void 0 !== t.morphTargets && (p.morphTargets = t.morphTargets), void 0 !== t.morphNormals && (p.morphNormals = t.morphNormals), void 0 !== t.dithering && (p.dithering = t.dithering), void 0 !== t.visible && (p.visible = t.visible), void 0 !== t.toneMapped && (p.toneMapped = t.toneMapped), void 0 !== t.userData && (p.userData = t.userData), void 0 !== t.uniforms) + for (o in t.uniforms) switch (s = t.uniforms[o], p.uniforms[o] = {}, s.type) { + case "t": + p.uniforms[o].value = n(s.value); + break; + case "c": + p.uniforms[o].value = (new x).setHex(s.value); + break; + case "v2": + p.uniforms[o].value = (new e).fromArray(s.value); + break; + case "v3": + p.uniforms[o].value = (new i).fromArray(s.value); + break; + case "v4": + p.uniforms[o].value = (new a).fromArray(s.value); + break; + case "m3": + p.uniforms[o].value = (new r).fromArray(s.value); + case "m4": + p.uniforms[o].value = (new l).fromArray(s.value); + break; + default: + p.uniforms[o].value = s.value + } + if (void 0 !== t.defines && (p.defines = t.defines), void 0 !== t.vertexShader && (p.vertexShader = t.vertexShader), void 0 !== t.fragmentShader && (p.fragmentShader = t.fragmentShader), void 0 !== t.extensions) + for (c in t.extensions) p.extensions[c] = t.extensions[c]; + return void 0 !== t.shading && (p.flatShading = 1 === t.shading), void 0 !== t.size && (p.size = t.size), void 0 !== t.sizeAttenuation && (p.sizeAttenuation = t.sizeAttenuation), void 0 !== t.map && (p.map = n(t.map)), void 0 !== t.matcap && (p.matcap = n(t.matcap)), void 0 !== t.alphaMap && (p.alphaMap = n(t.alphaMap), p.transparent = 1), void 0 !== t.bumpMap && (p.bumpMap = n(t.bumpMap)), void 0 !== t.bumpScale && (p.bumpScale = t.bumpScale), void 0 !== t.normalMap && (p.normalMap = n(t.normalMap)), void 0 !== t.normalMapType && (p.normalMapType = t.normalMapType), void 0 !== t.normalScale && (u = t.normalScale, 0 == Array.isArray(u) && (u = [u, u]), p.normalScale = (new e).fromArray(u)), void 0 !== t.displacementMap && (p.displacementMap = n(t.displacementMap)), void 0 !== t.displacementScale && (p.displacementScale = t.displacementScale), void 0 !== t.displacementBias && (p.displacementBias = t.displacementBias), void 0 !== t.roughnessMap && (p.roughnessMap = n(t.roughnessMap)), void 0 !== t.metalnessMap && (p.metalnessMap = n(t.metalnessMap)), void 0 !== t.emissiveMap && (p.emissiveMap = n(t.emissiveMap)), void 0 !== t.emissiveIntensity && (p.emissiveIntensity = t.emissiveIntensity), void 0 !== t.specularMap && (p.specularMap = n(t.specularMap)), void 0 !== t.envMap && (p.envMap = n(t.envMap)), void 0 !== t.envMapIntensity && (p.envMapIntensity = t.envMapIntensity), void 0 !== t.reflectivity && (p.reflectivity = t.reflectivity), void 0 !== t.refractionRatio && (p.refractionRatio = t.refractionRatio), void 0 !== t.lightMap && (p.lightMap = n(t.lightMap)), void 0 !== t.lightMapIntensity && (p.lightMapIntensity = t.lightMapIntensity), void 0 !== t.aoMap && (p.aoMap = n(t.aoMap)), void 0 !== t.aoMapIntensity && (p.aoMapIntensity = t.aoMapIntensity), void 0 !== t.gradientMap && (p.gradientMap = n(t.gradientMap)), void 0 !== t.clearcoatNormalMap && (p.clearcoatNormalMap = n(t.clearcoatNormalMap)), void 0 !== t.clearcoatNormalScale && (p.clearcoatNormalScale = (new e).fromArray(t.clearcoatNormalScale)), p + }, + setTextures: function(t) { + return this.textures = t, this + } + }), rh = function(t) { + var e = t.lastIndexOf("/"); + return -1 === e ? "./" : t.substr(0, e + 1) + }, Pr.prototype = Object.assign(Object.create(k.prototype), { + constructor: Pr, + isInstancedBufferGeometry: 1, + copy: function(t) { + return k.prototype.copy.call(this, t), this.maxInstancedCount = t.maxInstancedCount, this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + toJSON: function() { + var t = k.prototype.toJSON.call(this); + return t.maxInstancedCount = this.maxInstancedCount, t.isInstancedBufferGeometry = 1, t + } + }), Er.prototype = Object.assign(Object.create(A.prototype), { + constructor: Er, + isInstancedBufferAttribute: 1, + copy: function(t) { + return A.prototype.copy.call(this, t), this.meshPerAttribute = t.meshPerAttribute, this + }, + toJSON: function() { + var t = A.prototype.toJSON.call(this); + return t.meshPerAttribute = this.meshPerAttribute, t.isInstancedBufferAttribute = 1, t + } + }), Nr.prototype = Object.assign(Object.create(Wi.prototype), { + constructor: Nr, + load: function(t, e, n, i) { + var r = this, + o = new Hi(r.manager); + o.setPath(r.path), o.load(t, function(t) { + e(r.parse(JSON.parse(t))) + }, n, i) + }, + parse: function(t) { + var e, n, r, o, a, s, c, l, u, h, p, d, f, m, v, y = t.isInstancedBufferGeometry ? new Pr : new k, + x = t.data.index; + for (r in void 0 !== x && (e = new oh[x.type](x.array), y.setIndex(new A(e, 1))), n = t.data.attributes) o = n[r], e = new oh[o.type](o.array), a = new(o.isInstancedBufferAttribute ? Er : A)(e, o.itemSize, o.normalized), void 0 !== o.name && (a.name = o.name), y.addAttribute(r, a); + if (s = t.data.morphAttributes) + for (r in s) { + for (l = [], u = 0, h = (c = s[r]).length; u < h; u++) o = c[u], a = new A(e = new oh[o.type](o.array), o.itemSize, o.normalized), void 0 !== o.name && (a.name = o.name), l.push(a); + y.morphAttributes[r] = l + } + if (void 0 !== (p = t.data.groups || t.data.drawcalls || t.data.offsets)) + for (u = 0, d = p.length; u !== d; ++u) f = p[u], y.addGroup(f.start, f.count, f.materialIndex); + return void 0 !== (m = t.data.boundingSphere) && (v = new i, void 0 !== m.center && v.fromArray(m.center), y.boundingSphere = new g(v, m.radius)), t.name && (y.name = t.name), t.userData && (y.userData = t.userData), y + } + }), oh = { + Int8Array: Int8Array, + Uint8Array: Uint8Array, + Uint8ClampedArray: "undefined" != typeof Uint8ClampedArray ? Uint8ClampedArray : Uint8Array, + Int16Array: Int16Array, + Uint16Array: Uint16Array, + Int32Array: Int32Array, + Uint32Array: Uint32Array, + Float32Array: Float32Array, + Float64Array: Float64Array + }, Or.prototype = Object.assign(Object.create(Wi.prototype), { + constructor: Or, + load: function(t, e, n, i) { + var r, o = this, + a = "" === this.path ? rh(t) : this.path; + this.resourcePath = this.resourcePath || a, (r = new Hi(o.manager)).setPath(this.path), r.load(t, function(t) { + var n, r = null; + try { + r = JSON.parse(t) + } catch (t) { + return void(void 0 !== i && i(t)) + } + void 0 !== (n = r.metadata) && void 0 !== n.type && "geometry" !== n.type.toLowerCase() && o.parse(r, e) + }, n, i) + }, + parse: function(t, e) { + var n = this.parseShape(t.shapes), + i = this.parseGeometries(t.geometries, n), + r = this.parseImages(t.images, function() { + void 0 !== e && e(s) + }), + o = this.parseTextures(t.textures, r), + a = this.parseMaterials(t.materials, o), + s = this.parseObject(t.object, i, a); + return t.animations && (s.animations = this.parseAnimations(t.animations)), void 0 !== t.images && 0 !== t.images.length || void 0 !== e && e(s), s + }, + parseShape: function(t) { + var e, n, i, r = {}; + if (void 0 !== t) + for (e = 0, n = t.length; e < n; e++) r[(i = (new mr).fromJSON(t[e])).uuid] = i; + return r + }, + parseGeometries: function(t, e) { + var n, i, r, o, a, s, c, l, u, h, p = {}; + if (void 0 !== t) + for (n = new Nr, i = 0, r = t.length; i < r; i++) { + switch ((a = t[i]).type) { + case "PlaneGeometry": + case "PlaneBufferGeometry": + o = new Xu[a.type](a.width, a.height, a.widthSegments, a.heightSegments); + break; + case "BoxGeometry": + case "BoxBufferGeometry": + case "CubeGeometry": + o = new Xu[a.type](a.width, a.height, a.depth, a.widthSegments, a.heightSegments, a.depthSegments); + break; + case "CircleGeometry": + case "CircleBufferGeometry": + o = new Xu[a.type](a.radius, a.segments, a.thetaStart, a.thetaLength); + break; + case "CylinderGeometry": + case "CylinderBufferGeometry": + o = new Xu[a.type](a.radiusTop, a.radiusBottom, a.height, a.radialSegments, a.heightSegments, a.openEnded, a.thetaStart, a.thetaLength); + break; + case "ConeGeometry": + case "ConeBufferGeometry": + o = new Xu[a.type](a.radius, a.height, a.radialSegments, a.heightSegments, a.openEnded, a.thetaStart, a.thetaLength); + break; + case "SphereGeometry": + case "SphereBufferGeometry": + o = new Xu[a.type](a.radius, a.widthSegments, a.heightSegments, a.phiStart, a.phiLength, a.thetaStart, a.thetaLength); + break; + case "DodecahedronGeometry": + case "DodecahedronBufferGeometry": + case "IcosahedronGeometry": + case "IcosahedronBufferGeometry": + case "OctahedronGeometry": + case "OctahedronBufferGeometry": + case "TetrahedronGeometry": + case "TetrahedronBufferGeometry": + o = new Xu[a.type](a.radius, a.detail); + break; + case "RingGeometry": + case "RingBufferGeometry": + o = new Xu[a.type](a.innerRadius, a.outerRadius, a.thetaSegments, a.phiSegments, a.thetaStart, a.thetaLength); + break; + case "TorusGeometry": + case "TorusBufferGeometry": + o = new Xu[a.type](a.radius, a.tube, a.radialSegments, a.tubularSegments, a.arc); + break; + case "TorusKnotGeometry": + case "TorusKnotBufferGeometry": + o = new Xu[a.type](a.radius, a.tube, a.tubularSegments, a.radialSegments, a.p, a.q); + break; + case "TubeGeometry": + case "TubeBufferGeometry": + o = new Xu[a.type]((new ih[a.path.type]).fromJSON(a.path), a.tubularSegments, a.radius, a.radialSegments, a.closed); + break; + case "LatheGeometry": + case "LatheBufferGeometry": + o = new Xu[a.type](a.points, a.segments, a.phiStart, a.phiLength); + break; + case "PolyhedronGeometry": + case "PolyhedronBufferGeometry": + o = new Xu[a.type](a.vertices, a.indices, a.radius, a.details); + break; + case "ShapeGeometry": + case "ShapeBufferGeometry": + for (s = [], c = 0, l = a.shapes.length; c < l; c++) u = e[a.shapes[c]], s.push(u); + o = new Xu[a.type](s, a.curveSegments); + break; + case "ExtrudeGeometry": + case "ExtrudeBufferGeometry": + for (s = [], c = 0, l = a.shapes.length; c < l; c++) u = e[a.shapes[c]], s.push(u); + void 0 !== (h = a.options.extrudePath) && (a.options.extrudePath = (new ih[h.type]).fromJSON(h)), o = new Xu[a.type](s, a.options); + break; + case "BufferGeometry": + case "InstancedBufferGeometry": + o = n.parse(a); + break; + case "Geometry": + "THREE" in window && "LegacyJSONLoader" in THREE && (o = (new THREE.LegacyJSONLoader).parse(a, this.resourcePath).geometry); + break; + default: + continue + } + o.uuid = a.uuid, void 0 !== a.name && (o.name = a.name), 1 == o.isBufferGeometry && void 0 !== a.userData && (o.userData = a.userData), p[a.uuid] = o + } + return p + }, + parseMaterials: function(t, e) { + var n, i, r, o, a, s, c, l = {}, + u = {}; + if (void 0 !== t) + for ((n = new Cr).setTextures(e), i = 0, r = t.length; i < r; i++) + if ("MultiMaterial" === (o = t[i]).type) { + for (a = [], s = 0; s < o.materials.length; s++) void 0 === l[(c = o.materials[s]).uuid] && (l[c.uuid] = n.parse(c)), a.push(l[c.uuid]); + u[o.uuid] = a + } else void 0 === l[o.uuid] && (l[o.uuid] = n.parse(o)), u[o.uuid] = l[o.uuid]; + return u + }, + parseAnimations: function(t) { + var e, n, i, r = []; + for (e = 0; e < t.length; e++) n = t[e], i = ji.parse(n), void 0 !== n.uuid && (i.uuid = n.uuid), r.push(i); + return r + }, + parseImages: function(t, e) { + function n(t) { + return d.manager.itemStart(t), r.load(t, function() { + d.manager.itemEnd(t) + }, void 0, function() { + d.manager.itemError(t), d.manager.itemEnd(t) + }) + } + var i, r, o, a, s, c, l, u, h, p, d = this, + f = {}; + if (void 0 !== t && t.length > 0) + for (i = new Gi(e), (r = new Zi(i)).setCrossOrigin(this.crossOrigin), o = 0, a = t.length; o < a; o++) + if (c = (s = t[o]).url, Array.isArray(c)) + for (f[s.uuid] = [], l = 0, u = c.length; l < u; l++) h = c[l], p = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(h) ? h : d.resourcePath + h, f[s.uuid].push(n(p)); + else p = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(s.url) ? s.url : d.resourcePath + s.url, f[s.uuid] = n(p); + return f + }, + parseTextures: function(t, e) { + function n(t, e) { + return "number" == typeof t ? t : e[t] + } + var i, r, a, s, c = {}; + if (void 0 !== t) + for (i = 0, r = t.length; i < r; i++)(a = t[i]).image, e[a.image], (s = Array.isArray(e[a.image]) ? new ft(e[a.image]) : new o(e[a.image])).needsUpdate = 1, s.uuid = a.uuid, void 0 !== a.name && (s.name = a.name), void 0 !== a.mapping && (s.mapping = n(a.mapping, ah)), void 0 !== a.offset && s.offset.fromArray(a.offset), void 0 !== a.repeat && s.repeat.fromArray(a.repeat), void 0 !== a.center && s.center.fromArray(a.center), void 0 !== a.rotation && (s.rotation = a.rotation), void 0 !== a.wrap && (s.wrapS = n(a.wrap[0], sh), s.wrapT = n(a.wrap[1], sh)), void 0 !== a.format && (s.format = a.format), void 0 !== a.type && (s.type = a.type), void 0 !== a.encoding && (s.encoding = a.encoding), void 0 !== a.minFilter && (s.minFilter = n(a.minFilter, ch)), void 0 !== a.magFilter && (s.magFilter = n(a.magFilter, ch)), void 0 !== a.anisotropy && (s.anisotropy = a.anisotropy), void 0 !== a.flipY && (s.flipY = a.flipY), void 0 !== a.premultiplyAlpha && (s.premultiplyAlpha = a.premultiplyAlpha), void 0 !== a.unpackAlignment && (s.unpackAlignment = a.unpackAlignment), c[a.uuid] = s; + return c + }, + parseObject: function(t, e, n) { + function i(t) { + return e[t], e[t] + } + + function r(t) { + var e, i, r, o; + if (void 0 !== t) { + if (Array.isArray(t)) { + for (e = [], i = 0, r = t.length; i < r; i++) o = t[i], n[o], e.push(n[o]); + return e + } + return n[t], n[t] + } + } + var o, a, s, c, l, u, h, f, m; + switch (t.type) { + case "Scene": + o = new d, void 0 !== t.background && Number.isInteger(t.background) && (o.background = new x(t.background)), void 0 !== t.fog && ("Fog" === t.fog.type ? o.fog = new je(t.fog.color, t.fog.near, t.fog.far) : "FogExp2" === t.fog.type && (o.fog = new Ue(t.fog.color, t.fog.density))); + break; + case "PerspectiveCamera": + o = new X(t.fov, t.aspect, t.near, t.far), void 0 !== t.focus && (o.focus = t.focus), void 0 !== t.zoom && (o.zoom = t.zoom), void 0 !== t.filmGauge && (o.filmGauge = t.filmGauge), void 0 !== t.filmOffset && (o.filmOffset = t.filmOffset), void 0 !== t.view && (o.view = Object.assign({}, t.view)); + break; + case "OrthographicCamera": + o = new Mr(t.left, t.right, t.top, t.bottom, t.near, t.far), void 0 !== t.zoom && (o.zoom = t.zoom), void 0 !== t.view && (o.view = Object.assign({}, t.view)); + break; + case "AmbientLight": + o = new Ar(t.color, t.intensity); + break; + case "DirectionalLight": + o = new Tr(t.color, t.intensity); + break; + case "PointLight": + o = new wr(t.color, t.intensity, t.distance, t.decay); + break; + case "RectAreaLight": + o = new Lr(t.color, t.intensity, t.width, t.height); + break; + case "SpotLight": + o = new br(t.color, t.intensity, t.distance, t.angle, t.penumbra, t.decay); + break; + case "HemisphereLight": + o = new vr(t.color, t.groundColor, t.intensity); + break; + case "SkinnedMesh": + case "Mesh": + a = i(t.geometry), s = r(t.material), o = a.bones && a.bones.length > 0 ? new Ye(a, s) : new B(a, s), void 0 !== t.drawMode && o.setDrawMode(t.drawMode); + break; + case "LOD": + o = new Xe; + break; + case "Line": + o = new Ke(i(t.geometry), r(t.material), t.mode); + break; + case "LineLoop": + o = new en(i(t.geometry), r(t.material)); + break; + case "LineSegments": + o = new tn(i(t.geometry), r(t.material)); + break; + case "PointCloud": + case "Points": + o = new rn(i(t.geometry), r(t.material)); + break; + case "Sprite": + o = new He(r(t.material)); + break; + case "Group": + o = new Ie; + break; + default: + o = new p + } + if (o.uuid = t.uuid, void 0 !== t.name && (o.name = t.name), void 0 !== t.matrix ? (o.matrix.fromArray(t.matrix), void 0 !== t.matrixAutoUpdate && (o.matrixAutoUpdate = t.matrixAutoUpdate), o.matrixAutoUpdate && o.matrix.decompose(o.position, o.quaternion, o.scale)) : (void 0 !== t.position && o.position.fromArray(t.position), void 0 !== t.rotation && o.rotation.fromArray(t.rotation), void 0 !== t.quaternion && o.quaternion.fromArray(t.quaternion), void 0 !== t.scale && o.scale.fromArray(t.scale)), void 0 !== t.castShadow && (o.castShadow = t.castShadow), void 0 !== t.receiveShadow && (o.receiveShadow = t.receiveShadow), t.shadow && (void 0 !== t.shadow.bias && (o.shadow.bias = t.shadow.bias), void 0 !== t.shadow.radius && (o.shadow.radius = t.shadow.radius), void 0 !== t.shadow.mapSize && o.shadow.mapSize.fromArray(t.shadow.mapSize), void 0 !== t.shadow.camera && (o.shadow.camera = this.parseObject(t.shadow.camera))), void 0 !== t.visible && (o.visible = t.visible), void 0 !== t.frustumCulled && (o.frustumCulled = t.frustumCulled), void 0 !== t.renderOrder && (o.renderOrder = t.renderOrder), void 0 !== t.userData && (o.userData = t.userData), void 0 !== t.layers && (o.layers.mask = t.layers), void 0 !== t.children) + for (c = t.children, l = 0; l < c.length; l++) o.add(this.parseObject(c[l], e, n)); + if ("LOD" === t.type) + for (u = t.levels, h = 0; h < u.length; h++) f = u[h], void 0 !== (m = o.getObjectByProperty("uuid", f.object)) && o.addLevel(m, f.distance); + return o + } + }), ah = { + UVMapping: 300, + CubeReflectionMapping: Na, + CubeRefractionMapping: Oa, + EquirectangularReflectionMapping: Da, + EquirectangularRefractionMapping: Ia, + SphericalReflectionMapping: za, + CubeUVReflectionMapping: Ra, + CubeUVRefractionMapping: Fa + }, sh = { + RepeatWrapping: ka, + ClampToEdgeWrapping: Ba, + MirroredRepeatWrapping: Ua + }, ch = { + NearestFilter: ja, + NearestMipmapNearestFilter: Va, + NearestMipmapLinearFilter: Ga, + LinearFilter: Wa, + LinearMipmapNearestFilter: Ha, + LinearMipmapLinearFilter: qa + }, Dr.prototype = Object.assign(Object.create(Wi.prototype), { + constructor: Dr, + setOptions: function(t) { + return this.options = t, this + }, + load: function(t, e, n, i) { + var r, o; + if (void 0 === t && (t = ""), void 0 !== this.path && (t = this.path + t), t = this.manager.resolveURL(t), r = this, void 0 !== (o = Ju.get(t))) return r.manager.itemStart(t), setTimeout(function() { + e && e(o), r.manager.itemEnd(t) + }, 0), o; + fetch(t).then(function(t) { + return t.blob() + }).then(function(t) { + return void 0 === r.options ? createImageBitmap(t) : createImageBitmap(t, r.options) + }).then(function(n) { + Ju.add(t, n), e && e(n), r.manager.itemEnd(t) + }).catch(function(e) { + i && i(e), r.manager.itemError(t), r.manager.itemEnd(t) + }), r.manager.itemStart(t) + } + }), Object.assign(Ir.prototype, { + moveTo: function(t, e) { + this.currentPath = new fr, this.subPaths.push(this.currentPath), this.currentPath.moveTo(t, e) + }, + lineTo: function(t, e) { + this.currentPath.lineTo(t, e) + }, + quadraticCurveTo: function(t, e, n, i) { + this.currentPath.quadraticCurveTo(t, e, n, i) + }, + bezierCurveTo: function(t, e, n, i, r, o) { + this.currentPath.bezierCurveTo(t, e, n, i, r, o) + }, + splineThru: function(t) { + this.currentPath.splineThru(t) + }, + toShapes: function(t, e) { + function n(t) { + var e, n, i, r, o = []; + for (e = 0, n = t.length; e < n; e++) i = t[e], (r = new mr).curves = i.curves, o.push(r); + return o + } + + function i(t, e) { + var n, i, r, o, a, s, c, l = e.length, + u = 0; + for (n = l - 1, i = 0; i < l; n = i++) + if (r = e[n], a = (o = e[i]).x - r.x, s = o.y - r.y, Math.abs(s) > Number.EPSILON) { + if (s < 0 && (r = e[i], a = -a, o = e[n], s = -s), t.y < r.y || t.y > o.y) continue; + if (t.y === r.y) { + if (t.x === r.x) return 1 + } else { + if (0 == (c = s * (t.x - r.x) - a * (t.y - r.y))) return 1; + if (c < 0) continue; + u = !u + } + } else { + if (t.y !== r.y) continue; + if (o.x <= t.x && t.x <= r.x || r.x <= t.x && t.x <= o.x) return 1 + } + return u + } + var r, o, a, s, c, l, u, h, p, d, f, m, g, v, y, x, b, _, w, M, S, T, A, L, C, P = Hu.isClockWise, + E = this.subPaths; + if (0 === E.length) return []; + if (1 == e) return n(E); + if (s = [], 1 === E.length) return o = E[0], (a = new mr).curves = o.curves, s.push(a), s; + for (c = !P(E[0].getPoints()), c = t ? !c : c, l = [], h = [], (u = [])[p = 0] = void 0, h[p] = [], f = 0, m = E.length; f < m; f++) r = P(d = (o = E[f]).getPoints()), (r = t ? !r : r) ? (!c && u[p] && p++, u[p] = { + s: new mr, + p: d + }, u[p].s.curves = o.curves, c && p++, h[p] = []) : h[p].push({ + h: o, + p: d[0] + }); + if (!u[0]) return n(E); + if (u.length > 1) { + for (g = 0, v = [], y = 0, x = u.length; y < x; y++) l[y] = []; + for (y = 0, x = u.length; y < x; y++) + for (b = h[y], _ = 0; _ < b.length; _++) { + for (w = b[_], M = 1, S = 0; S < u.length; S++) i(w.p, u[S].p) && (y !== S && v.push({ + froms: y, + tos: S, + hole: _ + }), M ? (M = 0, l[S].push(w)) : g = 1); + M && l[y].push(w) + } + v.length > 0 && (g || (h = l)) + } + for (f = 0, A = u.length; f < A; f++) + for (a = u[f].s, s.push(a), L = 0, C = (T = h[f]).length; L < C; L++) a.holes.push(T[L].h); + return s + } + }), Object.assign(zr.prototype, { + isFont: 1, + generateShapes: function(t, e) { + var n, i, r, o; + for (void 0 === e && (e = 100), n = [], r = 0, o = (i = function(t, e, n) { + var i, r, o, a = Array.from ? Array.from(t) : (t + "").split(""), + s = e / n.resolution, + c = (n.boundingBox.yMax - n.boundingBox.yMin + n.underlineThickness) * s, + l = [], + u = 0, + h = 0; + for (i = 0; i < a.length; i++) "\n" === (r = a[i]) ? (u = 0, h -= c) : (u += (o = Rr(r, s, u, h, n)).offsetX, l.push(o.path)); + return l + }(t, e, this.data)).length; r < o; r++) Array.prototype.push.apply(n, i[r].toShapes()); + return n + } + }), Fr.prototype = Object.assign(Object.create(Wi.prototype), { + constructor: Fr, + load: function(t, e, n, i) { + var r = this, + o = new Hi(this.manager); + o.setPath(this.path), o.load(t, function(t) { + var n, i; + try { + n = JSON.parse(t) + } catch (e) { + n = JSON.parse(t.substring(65, t.length - 2)) + } + i = r.parse(n), e && e(i) + }, n, i) + }, + parse: function(t) { + return new zr(t) + } + }), uh = { + getContext: function() { + return void 0 === lh && (lh = new(window.AudioContext || window.webkitAudioContext)), lh + }, + setContext: function(t) { + lh = t + } + }, kr.prototype = Object.assign(Object.create(Wi.prototype), { + constructor: kr, + load: function(t, e, n, i) { + var r = new Hi(this.manager); + r.setResponseType("arraybuffer"), r.setPath(this.path), r.load(t, function(t) { + var n = t.slice(0); + uh.getContext().decodeAudioData(n, function(t) { + e(t) + }) + }, n, i) + } + }), Object.assign(Br.prototype, { + isSphericalHarmonics3: 1, + set: function(t) { + for (var e = 0; e < 9; e++) this.coefficients[e].copy(t[e]); + return this + }, + zero: function() { + for (var t = 0; t < 9; t++) this.coefficients[t].set(0, 0, 0); + return this + }, + getAt: function(t, e) { + var n = t.x, + i = t.y, + r = t.z, + o = this.coefficients; + return e.copy(o[0]).multiplyScalar(.282095), e.addScale(o[1], .488603 * i), e.addScale(o[2], .488603 * r), e.addScale(o[3], .488603 * n), e.addScale(o[4], n * i * 1.092548), e.addScale(o[5], i * r * 1.092548), e.addScale(o[6], .315392 * (3 * r * r - 1)), e.addScale(o[7], n * r * 1.092548), e.addScale(o[8], .546274 * (n * n - i * i)), e + }, + getIrradianceAt: function(t, e) { + var n = t.x, + i = t.y, + r = t.z, + o = this.coefficients; + return e.copy(o[0]).multiplyScalar(.886227), e.addScale(o[1], 1.023328 * i), e.addScale(o[2], 1.023328 * r), e.addScale(o[3], 1.023328 * n), e.addScale(o[4], .858086 * n * i), e.addScale(o[5], .858086 * i * r), e.addScale(o[6], .743125 * r * r - .247708), e.addScale(o[7], .858086 * n * r), e.addScale(o[8], .429043 * (n * n - i * i)), e + }, + add: function(t) { + for (var e = 0; e < 9; e++) this.coefficients[e].add(t.coefficients[e]); + return this + }, + scale: function(t) { + for (var e = 0; e < 9; e++) this.coefficients[e].multiplyScalar(t); + return this + }, + lerp: function(t, e) { + for (var n = 0; n < 9; n++) this.coefficients[n].lerp(t.coefficients[n], e); + return this + }, + equals: function(t) { + for (var e = 0; e < 9; e++) + if (!this.coefficients[e].equals(t.coefficients[e])) return 0; + return 1 + }, + copy: function(t) { + return this.set(t.coefficients) + }, + clone: function() { + return (new this.constructor).copy(this) + }, + fromArray: function(t, e) { + var n, i; + for (void 0 === e && (e = 0), n = this.coefficients, i = 0; i < 9; i++) n[i].fromArray(t, e + 3 * i); + return this + }, + toArray: function(t, e) { + var n, i; + for (void 0 === t && (t = []), void 0 === e && (e = 0), n = this.coefficients, i = 0; i < 9; i++) n[i].toArray(t, e + 3 * i); + return t + } + }), Object.assign(Br, { + getBasisAt: function(t, e) { + var n = t.x, + i = t.y, + r = t.z; + e[0] = .282095, e[1] = .488603 * i, e[2] = .488603 * r, e[3] = .488603 * n, e[4] = 1.092548 * n * i, e[5] = 1.092548 * i * r, e[6] = .315392 * (3 * r * r - 1), e[7] = 1.092548 * n * r, e[8] = .546274 * (n * n - i * i) + } + }), Ur.prototype = Object.assign(Object.create(gr.prototype), { + constructor: Ur, + isLightProbe: 1, + copy: function(t) { + return gr.prototype.copy.call(this, t), this.sh.copy(t.sh), this.intensity = t.intensity, this + }, + toJSON: function(t) { + return gr.prototype.toJSON.call(this, t) + } + }), jr.prototype = Object.assign(Object.create(Ur.prototype), { + constructor: jr, + isHemisphereLightProbe: 1, + copy: function(t) { + return Ur.prototype.copy.call(this, t), this + }, + toJSON: function(t) { + return Ur.prototype.toJSON.call(this, t) + } + }), Vr.prototype = Object.assign(Object.create(Ur.prototype), { + constructor: Vr, + isAmbientLightProbe: 1, + copy: function(t) { + return Ur.prototype.copy.call(this, t), this + }, + toJSON: function(t) { + return Ur.prototype.toJSON.call(this, t) + } + }), hh = new l, ph = new l, Object.assign(function() { + this.type = "StereoCamera", this.aspect = 1, this.eyeSep = .064, this.cameraL = new X, this.cameraL.layers.enable(1), this.cameraL.matrixAutoUpdate = 0, this.cameraR = new X, this.cameraR.layers.enable(2), this.cameraR.matrixAutoUpdate = 0, this._cache = { + focus: null, + fov: null, + aspect: null, + near: null, + far: null, + zoom: null, + eyeSep: null + } + }.prototype, { + update: function(t) { + var e, n, i, r, o, a, s = this._cache; + (s.focus !== t.focus || s.fov !== t.fov || s.aspect !== t.aspect * this.aspect || s.near !== t.near || s.far !== t.far || s.zoom !== t.zoom || s.eyeSep !== this.eyeSep) && (s.focus = t.focus, s.fov = t.fov, s.aspect = t.aspect * this.aspect, s.near = t.near, s.far = t.far, s.zoom = t.zoom, s.eyeSep = this.eyeSep, e = t.projectionMatrix.clone(), i = (n = s.eyeSep / 2) * s.near / s.focus, r = s.near * Math.tan(ic.DEG2RAD * s.fov * .5) / s.zoom, ph.elements[12] = -n, hh.elements[12] = n, o = -r * s.aspect + i, a = r * s.aspect + i, e.elements[0] = 2 * s.near / (a - o), e.elements[8] = (a + o) / (a - o), this.cameraL.projectionMatrix.copy(e), o = -r * s.aspect - i, a = r * s.aspect - i, e.elements[0] = 2 * s.near / (a - o), e.elements[8] = (a + o) / (a - o), this.cameraR.projectionMatrix.copy(e)), this.cameraL.matrixWorld.copy(t.matrixWorld).multiply(ph), this.cameraR.matrixWorld.copy(t.matrixWorld).multiply(hh) + } + }), Object.assign(Gr.prototype, { + start: function() { + this.startTime = ("undefined" == typeof performance ? Date : performance).now(), this.oldTime = this.startTime, this.elapsedTime = 0, this.running = 1 + }, + stop: function() { + this.getElapsedTime(), this.running = 0, this.autoStart = 0 + }, + getElapsedTime: function() { + return this.getDelta(), this.elapsedTime + }, + getDelta: function() { + var t, e = 0; + return this.autoStart && !this.running ? (this.start(), 0) : (this.running && (e = ((t = ("undefined" == typeof performance ? Date : performance).now()) - this.oldTime) / 1e3, this.oldTime = t, this.elapsedTime += e), e) + } + }), dh = new i, fh = new n, mh = new i, gh = new i, Wr.prototype = Object.assign(Object.create(p.prototype), { + constructor: Wr, + getInput: function() { + return this.gain + }, + removeFilter: function() { + return null !== this.filter && (this.gain.disconnect(this.filter), this.filter.disconnect(this.context.destination), this.gain.connect(this.context.destination), this.filter = null), this + }, + getFilter: function() { + return this.filter + }, + setFilter: function(t) { + return null !== this.filter ? (this.gain.disconnect(this.filter), this.filter.disconnect(this.context.destination)) : this.gain.disconnect(this.context.destination), this.filter = t, this.gain.connect(this.filter), this.filter.connect(this.context.destination), this + }, + getMasterVolume: function() { + return this.gain.gain.value + }, + setMasterVolume: function(t) { + return this.gain.gain.setTargetAtTime(t, this.context.currentTime, .01), this + }, + updateMatrixWorld: function(t) { + var e, n, i; + p.prototype.updateMatrixWorld.call(this, t), e = this.context.listener, n = this.up, this.timeDelta = this._clock.getDelta(), this.matrixWorld.decompose(dh, fh, mh), gh.set(0, 0, -1).applyQuaternion(fh), e.positionX ? (i = this.context.currentTime + this.timeDelta, e.positionX.linearRampToValueAtTime(dh.x, i), e.positionY.linearRampToValueAtTime(dh.y, i), e.positionZ.linearRampToValueAtTime(dh.z, i), e.forwardX.linearRampToValueAtTime(gh.x, i), e.forwardY.linearRampToValueAtTime(gh.y, i), e.forwardZ.linearRampToValueAtTime(gh.z, i), e.upX.linearRampToValueAtTime(n.x, i), e.upY.linearRampToValueAtTime(n.y, i), e.upZ.linearRampToValueAtTime(n.z, i)) : (e.setPosition(dh.x, dh.y, dh.z), e.setOrientation(gh.x, gh.y, gh.z, n.x, n.y, n.z)) + } + }), Hr.prototype = Object.assign(Object.create(p.prototype), { + constructor: Hr, + getOutput: function() { + return this.gain + }, + setNodeSource: function(t) { + return this.hasPlaybackControl = 0, this.sourceType = "audioNode", this.source = t, this.connect(), this + }, + setMediaElementSource: function(t) { + return this.hasPlaybackControl = 0, this.sourceType = "mediaNode", this.source = this.context.createMediaElementSource(t), this.connect(), this + }, + setMediaStreamSource: function(t) { + return this.hasPlaybackControl = 0, this.sourceType = "mediaStreamNode", this.source = this.context.createMediaStreamSource(t), this.connect(), this + }, + setBuffer: function(t) { + return this.buffer = t, this.sourceType = "buffer", this.autoplay && this.play(), this + }, + play: function() { + if (1 != this.isPlaying && 0 != this.hasPlaybackControl) { + var t = this.context.createBufferSource(); + return t.buffer = this.buffer, t.loop = this.loop, t.onended = this.onEnded.bind(this), this.startTime = this.context.currentTime, t.start(this.startTime, this.offset, this.duration), this.isPlaying = 1, this.source = t, this.setDetune(this.detune), this.setPlaybackRate(this.playbackRate), this.connect() + } + }, + pause: function() { + if (0 != this.hasPlaybackControl) return 1 == this.isPlaying && (this.source.stop(), this.source.onended = null, this.offset += (this.context.currentTime - this.startTime) * this.playbackRate, this.isPlaying = 0), this + }, + stop: function() { + if (0 != this.hasPlaybackControl) return this.source.stop(), this.source.onended = null, this.offset = 0, this.isPlaying = 0, this + }, + connect: function() { + if (this.filters.length > 0) { + this.source.connect(this.filters[0]); + for (var t = 1, e = this.filters.length; t < e; t++) this.filters[t - 1].connect(this.filters[t]); + this.filters[this.filters.length - 1].connect(this.getOutput()) + } else this.source.connect(this.getOutput()); + return this + }, + disconnect: function() { + if (this.filters.length > 0) { + this.source.disconnect(this.filters[0]); + for (var t = 1, e = this.filters.length; t < e; t++) this.filters[t - 1].disconnect(this.filters[t]); + this.filters[this.filters.length - 1].disconnect(this.getOutput()) + } else this.source.disconnect(this.getOutput()); + return this + }, + getFilters: function() { + return this.filters + }, + setFilters: function(t) { + return t || (t = []), 1 == this.isPlaying ? (this.disconnect(), this.filters = t, this.connect()) : this.filters = t, this + }, + setDetune: function(t) { + if (this.detune = t, void 0 !== this.source.detune) return 1 == this.isPlaying && this.source.detune.setTargetAtTime(this.detune, this.context.currentTime, .01), this + }, + getDetune: function() { + return this.detune + }, + getFilter: function() { + return this.getFilters()[0] + }, + setFilter: function(t) { + return this.setFilters(t ? [t] : []) + }, + setPlaybackRate: function(t) { + if (0 != this.hasPlaybackControl) return this.playbackRate = t, 1 == this.isPlaying && this.source.playbackRate.setTargetAtTime(this.playbackRate, this.context.currentTime, .01), this + }, + getPlaybackRate: function() { + return this.playbackRate + }, + onEnded: function() { + this.isPlaying = 0 + }, + getLoop: function() { + return 0 == this.hasPlaybackControl ? 0 : this.loop + }, + setLoop: function(t) { + if (0 != this.hasPlaybackControl) return this.loop = t, 1 == this.isPlaying && (this.source.loop = this.loop), this + }, + getVolume: function() { + return this.gain.gain.value + }, + setVolume: function(t) { + return this.gain.gain.setTargetAtTime(t, this.context.currentTime, .01), this + } + }), vh = new i, yh = new n, xh = new i, bh = new i, qr.prototype = Object.assign(Object.create(Hr.prototype), { + constructor: qr, + getOutput: function() { + return this.panner + }, + getRefDistance: function() { + return this.panner.refDistance + }, + setRefDistance: function(t) { + return this.panner.refDistance = t, this + }, + getRolloffFactor: function() { + return this.panner.rolloffFactor + }, + setRolloffFactor: function(t) { + return this.panner.rolloffFactor = t, this + }, + getDistanceModel: function() { + return this.panner.distanceModel + }, + setDistanceModel: function(t) { + return this.panner.distanceModel = t, this + }, + getMaxDistance: function() { + return this.panner.maxDistance + }, + setMaxDistance: function(t) { + return this.panner.maxDistance = t, this + }, + setDirectionalCone: function(t, e, n) { + return this.panner.coneInnerAngle = t, this.panner.coneOuterAngle = e, this.panner.coneOuterGain = n, this + }, + updateMatrixWorld: function(t) { + var e, n; + p.prototype.updateMatrixWorld.call(this, t), 1 == this.hasPlaybackControl && 0 == this.isPlaying || (this.matrixWorld.decompose(vh, yh, xh), bh.set(0, 0, 1).applyQuaternion(yh), (e = this.panner).positionX ? (n = this.context.currentTime + this.listener.timeDelta, e.positionX.linearRampToValueAtTime(vh.x, n), e.positionY.linearRampToValueAtTime(vh.y, n), e.positionZ.linearRampToValueAtTime(vh.z, n), e.orientationX.linearRampToValueAtTime(bh.x, n), e.orientationY.linearRampToValueAtTime(bh.y, n), e.orientationZ.linearRampToValueAtTime(bh.z, n)) : (e.setPosition(vh.x, vh.y, vh.z), e.setOrientation(bh.x, bh.y, bh.z))) + } + }), Object.assign(Xr.prototype, { + getFrequencyData: function() { + return this.analyser.getByteFrequencyData(this.data), this.data + }, + getAverageFrequency: function() { + var t, e = 0, + n = this.getFrequencyData(); + for (t = 0; t < n.length; t++) e += n[t]; + return e / n.length + } + }), Object.assign(Yr.prototype, { + accumulate: function(t, e) { + var n, i, r = this.buffer, + o = this.valueSize, + a = t * o + o, + s = this.cumulativeWeight; + if (0 === s) { + for (n = 0; n !== o; ++n) r[a + n] = r[n]; + s = e + } else i = e / (s += e), this._mixBufferRegion(r, a, 0, i, o); + this.cumulativeWeight = s + }, + apply: function(t) { + var e, n, i, r = this.valueSize, + o = this.buffer, + a = t * r + r, + s = this.cumulativeWeight, + c = this.binding; + for (this.cumulativeWeight = 0, s < 1 && (e = 3 * r, this._mixBufferRegion(o, a, e, 1 - s, r)), n = r, i = r + r; n !== i; ++n) + if (o[n] !== o[n + r]) { + c.setValue(o, a); + break + } + }, + saveOriginalState: function() { + var t, e, n = this.binding, + i = this.buffer, + r = this.valueSize, + o = 3 * r; + for (n.getValue(i, o), t = r, e = o; t !== e; ++t) i[t] = i[o + t % r]; + this.cumulativeWeight = 0 + }, + restoreOriginalState: function() { + var t = 3 * this.valueSize; + this.binding.setValue(this.buffer, t) + }, + _select: function(t, e, n, i, r) { + if (i >= .5) + for (var o = 0; o !== r; ++o) t[e + o] = t[n + o] + }, + _slerp: function(t, e, i, r) { + n.slerpFlat(t, e, t, e, t, i, r) + }, + _lerp: function(t, e, n, i, r) { + var o, a, s = 1 - i; + for (o = 0; o !== r; ++o) t[a = e + o] = t[a] * s + t[n + o] * i + } + }), _h = RegExp("[" + "\\[\\]\\.:\\/" + "]", "g"), wh = /((?:WC+[\/:])*)/.source.replace("WC", "[^\\[\\]\\.:\\/]"), Mh = /(WCOD+)?/.source.replace("WCOD", "[^\\[\\]:\\/]"), Sh = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC", "[^\\[\\]\\.:\\/]"), Th = /\.(WC+)(?:\[(.+)\])?/.source.replace("WC", "[^\\[\\]\\.:\\/]"), Ah = RegExp("^" + wh + Mh + Sh + Th + "$"), Lh = ["material", "materials", "bones"], Object.assign(Zr.prototype, { + getValue: function(t, e) { + this.bind(); + var n = this._targetGroup.nCachedObjects_, + i = this._bindings[n]; + void 0 !== i && i.getValue(t, e) + }, + setValue: function(t, e) { + var n, i, r = this._bindings; + for (n = this._targetGroup.nCachedObjects_, i = r.length; n !== i; ++n) r[n].setValue(t, e) + }, + bind: function() { + var t, e, n = this._bindings; + for (t = this._targetGroup.nCachedObjects_, e = n.length; t !== e; ++t) n[t].bind() + }, + unbind: function() { + var t, e, n = this._bindings; + for (t = this._targetGroup.nCachedObjects_, e = n.length; t !== e; ++t) n[t].unbind() + } + }), Object.assign(Jr, { + Composite: Zr, + create: function(t, e, n) { + return t && t.isAnimationObjectGroup ? new Jr.Composite(t, e, n) : new Jr(t, e, n) + }, + sanitizeNodeName: function(t) { + return t.replace(/\s/g, "_").replace(_h, "") + }, + parseTrackName: function(t) { + var e, n, i, r = Ah.exec(t); + if (!r) throw Error("PropertyBinding: Cannot parse trackName: " + t); + if (void 0 !== (n = (e = { + nodeName: r[2], + objectName: r[3], + objectIndex: r[4], + propertyName: r[5], + propertyIndex: r[6] + }).nodeName && e.nodeName.lastIndexOf(".")) && -1 !== n && (i = e.nodeName.substring(n + 1), -1 !== Lh.indexOf(i) && (e.nodeName = e.nodeName.substring(0, n), e.objectName = i)), null === e.propertyName || 0 === e.propertyName.length) throw Error("PropertyBinding: can not parse propertyName from trackName: " + t); + return e + }, + findNode: function(t, e) { + var n, i, r; + return e && "" !== e && "root" !== e && "." !== e && -1 !== e && e !== t.name && e !== t.uuid ? t.skeleton && void 0 !== (n = t.skeleton.getBoneByName(e)) ? n : t.children && (r = (i = function(t) { + var n, r, o; + for (n = 0; n < t.length; n++) { + if ((r = t[n]).name === e || r.uuid === e) return r; + if (o = i(r.children)) return o + } + return null + })(t.children)) ? r : null : t + } + }), Object.assign(Jr.prototype, { + _getValue_unavailable: function() {}, + _setValue_unavailable: function() {}, + BindingType: { + Direct: 0, + EntireArray: 1, + ArrayElement: 2, + HasFromToArray: 3 + }, + Versioning: { + None: 0, + NeedsUpdate: 1, + MatrixWorldNeedsUpdate: 2 + }, + GetterByBindingType: [function(t, e) { + t[e] = this.node[this.propertyName] + }, function(t, e) { + var n, i, r = this.resolvedProperty; + for (n = 0, i = r.length; n !== i; ++n) t[e++] = r[n] + }, function(t, e) { + t[e] = this.resolvedProperty[this.propertyIndex] + }, function(t, e) { + this.resolvedProperty.toArray(t, e) + }], + SetterByBindingTypeAndVersioning: [ + [function(t, e) { + this.targetObject[this.propertyName] = t[e] + }, function(t, e) { + this.targetObject[this.propertyName] = t[e], this.targetObject.needsUpdate = 1 + }, function(t, e) { + this.targetObject[this.propertyName] = t[e], this.targetObject.matrixWorldNeedsUpdate = 1 + }], + [function(t, e) { + var n, i, r = this.resolvedProperty; + for (n = 0, i = r.length; n !== i; ++n) r[n] = t[e++] + }, function(t, e) { + var n, i, r = this.resolvedProperty; + for (n = 0, i = r.length; n !== i; ++n) r[n] = t[e++]; + this.targetObject.needsUpdate = 1 + }, function(t, e) { + var n, i, r = this.resolvedProperty; + for (n = 0, i = r.length; n !== i; ++n) r[n] = t[e++]; + this.targetObject.matrixWorldNeedsUpdate = 1 + }], + [function(t, e) { + this.resolvedProperty[this.propertyIndex] = t[e] + }, function(t, e) { + this.resolvedProperty[this.propertyIndex] = t[e], this.targetObject.needsUpdate = 1 + }, function(t, e) { + this.resolvedProperty[this.propertyIndex] = t[e], this.targetObject.matrixWorldNeedsUpdate = 1 + }], + [function(t, e) { + this.resolvedProperty.fromArray(t, e) + }, function(t, e) { + this.resolvedProperty.fromArray(t, e), this.targetObject.needsUpdate = 1 + }, function(t, e) { + this.resolvedProperty.fromArray(t, e), this.targetObject.matrixWorldNeedsUpdate = 1 + }] + ], + getValue: function(t, e) { + this.bind(), this.getValue(t, e) + }, + setValue: function(t, e) { + this.bind(), this.setValue(t, e) + }, + bind: function() { + var t, e, n, i, r, o = this.node, + a = this.parsedPath, + s = a.objectName, + c = a.propertyName, + l = a.propertyIndex; + if (o || (o = Jr.findNode(this.rootNode, a.nodeName) || this.rootNode, this.node = o), this.getValue = this._getValue_unavailable, this.setValue = this._setValue_unavailable, o) { + if (s) { + switch (t = a.objectIndex, s) { + case "materials": + if (!o.material) return; + if (!o.material.materials) return; + o = o.material.materials; + break; + case "bones": + if (!o.skeleton) return; + for (o = o.skeleton.bones, e = 0; e < o.length; e++) + if (o[e].name === t) { + t = e; + break + } + break; + default: + if (void 0 === o[s]) return; + o = o[s] + } + if (void 0 !== t) { + if (void 0 === o[t]) return; + o = o[t] + } + } + if (void 0 !== (n = o[c])) { + if (i = this.Versioning.None, this.targetObject = o, void 0 !== o.needsUpdate ? i = this.Versioning.NeedsUpdate : void 0 !== o.matrixWorldNeedsUpdate && (i = this.Versioning.MatrixWorldNeedsUpdate), r = this.BindingType.Direct, void 0 !== l) { + if ("morphTargetInfluences" === c) { + if (!o.geometry) return; + if (o.geometry.isBufferGeometry) { + if (!o.geometry.morphAttributes) return; + for (e = 0; e < this.node.geometry.morphAttributes.position.length; e++) + if (o.geometry.morphAttributes.position[e].name === l) { + l = e; + break + } + } else { + if (!o.geometry.morphTargets) return; + for (e = 0; e < this.node.geometry.morphTargets.length; e++) + if (o.geometry.morphTargets[e].name === l) { + l = e; + break + } + } + } + r = this.BindingType.ArrayElement, this.resolvedProperty = n, this.propertyIndex = l + } else void 0 !== n.fromArray && void 0 !== n.toArray ? (r = this.BindingType.HasFromToArray, this.resolvedProperty = n) : Array.isArray(n) ? (r = this.BindingType.EntireArray, this.resolvedProperty = n) : this.propertyName = c; + this.getValue = this.GetterByBindingType[r], this.setValue = this.SetterByBindingTypeAndVersioning[r][i] + } else a.nodeName + } + }, + unbind: function() { + this.node = null, this.getValue = this._getValue_unbound, this.setValue = this._setValue_unbound + } + }), Object.assign(Jr.prototype, { + _getValue_unbound: Jr.prototype.getValue, + _setValue_unbound: Jr.prototype.setValue + }), Object.assign(function() { + var t, e, n, i; + for (this.uuid = ic.generateUUID(), this._objects = Array.prototype.slice.call(arguments), this.nCachedObjects_ = 0, t = {}, this._indicesByUUID = t, e = 0, n = arguments.length; e !== n; ++e) t[arguments[e].uuid] = e; + this._paths = [], this._parsedPaths = [], this._bindings = [], this._bindingsIndicesByPath = {}, i = this, this.stats = { + objects: {get total() { + return i._objects.length + }, + get inUse() { + return this.total - i.nCachedObjects_ + } + }, + get bindingsPerObject() { + return i._bindings.length + } + } + }.prototype, { + isAnimationObjectGroup: 1, + add: function() { + var t, e, n, i, r, o, a, s, c, l, u, h, p = this._objects, + d = p.length, + f = this.nCachedObjects_, + m = this._indicesByUUID, + g = this._paths, + v = this._parsedPaths, + y = this._bindings, + x = y.length; + for (t = 0, e = arguments.length; t !== e; ++t) + if (void 0 === (r = m[i = (n = arguments[t]).uuid])) + for (r = d++, m[i] = r, p.push(n), o = 0, a = x; o !== a; ++o) y[o].push(new Jr(n, g[o], v[o])); + else if (r < f) + for (p[r], m[(c = p[s = --f]).uuid] = r, p[r] = c, m[i] = s, p[s] = n, o = 0, a = x; o !== a; ++o) u = (l = y[o])[s], h = l[r], l[r] = u, void 0 === h && (h = new Jr(n, g[o], v[o])), l[s] = h; + else p[r]; + this.nCachedObjects_ = f + }, + remove: function() { + var t, e, n, i, r, o, a, s, c, l, u, h, p = this._objects, + d = this.nCachedObjects_, + f = this._indicesByUUID, + m = this._bindings, + g = m.length; + for (t = 0, e = arguments.length; t !== e; ++t) + if (void 0 !== (r = f[i = (n = arguments[t]).uuid]) && r >= d) + for (f[(a = p[o = d++]).uuid] = r, p[r] = a, f[i] = o, p[o] = n, s = 0, c = g; s !== c; ++s) u = (l = m[s])[o], h = l[r], l[r] = u, l[o] = h; + this.nCachedObjects_ = d + }, + uncache: function() { + var t, e, n, i, r, o, a, s, c, l, u, h, p, d = this._objects, + f = d.length, + m = this.nCachedObjects_, + g = this._indicesByUUID, + v = this._bindings, + y = v.length; + for (t = 0, e = arguments.length; t !== e; ++t) + if (void 0 !== (i = g[n = arguments[t].uuid])) + if (delete g[n], i < m) + for (o = d[r = --m], s = d[a = --f], g[o.uuid] = i, d[i] = o, g[s.uuid] = r, d[r] = s, d.pop(), c = 0, l = y; c !== l; ++c) h = (u = v[c])[r], p = u[a], u[i] = h, u[r] = p, u.pop(); + else + for (g[(s = d[a = --f]).uuid] = i, d[i] = s, d.pop(), c = 0, l = y; c !== l; ++c)(u = v[c])[i] = u[a], u.pop(); + this.nCachedObjects_ = m + }, + subscribe_: function(t, e) { + var n, i, r, o, a, s, c, l, u, h = this._bindingsIndicesByPath, + p = h[t], + d = this._bindings; + if (void 0 !== p) return d[p]; + for (n = this._paths, i = this._parsedPaths, o = (r = this._objects).length, a = this.nCachedObjects_, s = Array(o), p = d.length, h[t] = p, n.push(t), i.push(e), d.push(s), c = a, l = r.length; c !== l; ++c) u = r[c], s[c] = new Jr(u, t, e); + return s + }, + unsubscribe_: function(t) { + var e, n, i, r, o, a = this._bindingsIndicesByPath, + s = a[t]; + void 0 !== s && (e = this._paths, n = this._parsedPaths, o = (i = this._bindings)[r = i.length - 1], a[t[r]] = s, i[s] = o, i.pop(), n[s] = n[r], n.pop(), e[s] = e[r], e.pop()) + } + }), Object.assign($r.prototype, { + play: function() { + return this._mixer._activateAction(this), this + }, + stop: function() { + return this._mixer._deactivateAction(this), this.reset() + }, + reset: function() { + return this.paused = 0, this.enabled = 1, this.time = 0, this._loopCount = -1, this._startTime = null, this.stopFading().stopWarping() + }, + isRunning: function() { + return this.enabled && !this.paused && 0 !== this.timeScale && null === this._startTime && this._mixer._isActiveAction(this) + }, + isScheduled: function() { + return this._mixer._isActiveAction(this) + }, + startAt: function(t) { + return this._startTime = t, this + }, + setLoop: function(t, e) { + return this.loop = t, this.repetitions = e, this + }, + setEffectiveWeight: function(t) { + return this.weight = t, this._effectiveWeight = this.enabled ? t : 0, this.stopFading() + }, + getEffectiveWeight: function() { + return this._effectiveWeight + }, + fadeIn: function(t) { + return this._scheduleFading(t, 0, 1) + }, + fadeOut: function(t) { + return this._scheduleFading(t, 1, 0) + }, + crossFadeFrom: function(t, e, n) { + if (t.fadeOut(e), this.fadeIn(e), n) { + var i = this._clip.duration, + r = t._clip.duration, + o = r / i, + a = i / r; + t.warp(1, o, e), this.warp(a, 1, e) + } + return this + }, + crossFadeTo: function(t, e, n) { + return t.crossFadeFrom(this, e, n) + }, + stopFading: function() { + var t = this._weightInterpolant; + return null !== t && (this._weightInterpolant = null, this._mixer._takeBackControlInterpolant(t)), this + }, + setEffectiveTimeScale: function(t) { + return this.timeScale = t, this._effectiveTimeScale = this.paused ? 0 : t, this.stopWarping() + }, + getEffectiveTimeScale: function() { + return this._effectiveTimeScale + }, + setDuration: function(t) { + return this.timeScale = this._clip.duration / t, this.stopWarping() + }, + syncWith: function(t) { + return this.time = t.time, this.timeScale = t.timeScale, this.stopWarping() + }, + halt: function(t) { + return this.warp(this._effectiveTimeScale, 0, t) + }, + warp: function(t, e, n) { + var i, r, o = this._mixer, + a = o.time, + s = this._timeScaleInterpolant, + c = this.timeScale; + return null === s && (s = o._lendControlInterpolant(), this._timeScaleInterpolant = s), i = s.parameterPositions, r = s.sampleValues, i[0] = a, i[1] = a + n, r[0] = t / c, r[1] = e / c, this + }, + stopWarping: function() { + var t = this._timeScaleInterpolant; + return null !== t && (this._timeScaleInterpolant = null, this._mixer._takeBackControlInterpolant(t)), this + }, + getMixer: function() { + return this._mixer + }, + getClip: function() { + return this._clip + }, + getRoot: function() { + return this._localRoot || this._mixer._root + }, + _update: function(t, e, n, i) { + var r, o, a, s, c, l, u, h; + if (this.enabled) { + if (null !== (r = this._startTime)) { + if ((o = (t - r) * n) < 0 || 0 === n) return; + this._startTime = null, e = n * o + } + if (e *= this._updateTimeScale(t), a = this._updateTime(e), (s = this._updateWeight(t)) > 0) + for (c = this._interpolants, l = this._propertyBindings, u = 0, h = c.length; u !== h; ++u) c[u].evaluate(a), l[u].accumulate(i, s) + } else this._updateWeight(t) + }, + _updateWeight: function(t) { + var e, n, i = 0; + return this.enabled && (i = this.weight, null !== (e = this._weightInterpolant) && (i *= n = e.evaluate(t)[0], t > e.parameterPositions[1] && (this.stopFading(), 0 === n && (this.enabled = 0)))), this._effectiveWeight = i, i + }, + _updateTimeScale: function(t) { + var e, n = 0; + return this.paused || (n = this.timeScale, null !== (e = this._timeScaleInterpolant) && (n *= e.evaluate(t)[0], t > e.parameterPositions[1] && (this.stopWarping(), 0 === n ? this.paused = 1 : this.timeScale = n))), this._effectiveTimeScale = n, n + }, + _updateTime: function(t) { + var e, n, i, r = this.time + t, + o = this._clip.duration, + a = this.loop, + s = this._loopCount, + c = 2202 === a; + if (0 === t) return -1 === s ? r : c && 1 == (1 & s) ? o - r : r; + if (2200 === a) { + -1 === s && (this._loopCount = 0, this._setEndings(1, 1, 0)); + t: { + if (r >= o) r = o; + else { + if (!(r < 0)) { + this.time = r; + break t + } + r = 0 + } + this.clampWhenFinished ? this.paused = 1 : this.enabled = 0, this.time = r, this._mixer.dispatchEvent({ + type: "finished", + action: this, + direction: t < 0 ? -1 : 1 + }) + } + } else if (-1 === s && (t >= 0 ? (s = 0, this._setEndings(1, 0 === this.repetitions, c)) : this._setEndings(0 === this.repetitions, 1, c)), r >= o || r < 0 ? (r -= o * (e = Math.floor(r / o)), s += Math.abs(e), (n = this.repetitions - s) <= 0 ? (this.clampWhenFinished ? this.paused = 1 : this.enabled = 0, r = t > 0 ? o : 0, this.time = r, this._mixer.dispatchEvent({ + type: "finished", + action: this, + direction: t > 0 ? 1 : -1 + })) : (1 === n ? (i = t < 0, this._setEndings(i, !i, c)) : this._setEndings(0, 0, c), this._loopCount = s, this.time = r, this._mixer.dispatchEvent({ + type: "loop", + action: this, + loopDelta: e + }))) : this.time = r, c && 1 == (1 & s)) return o - r; + return r + }, + _setEndings: function(t, e, n) { + var i = this._interpolantSettings; + n ? (i.endingStart = 2401, i.endingEnd = 2401) : (i.endingStart = t ? this.zeroSlopeAtStart ? 2401 : Fs : 2402, i.endingEnd = e ? this.zeroSlopeAtEnd ? 2401 : Fs : 2402) + }, + _scheduleFading: function(t, e, n) { + var i, r, o = this._mixer, + a = o.time, + s = this._weightInterpolant; + return null === s && (s = o._lendControlInterpolant(), this._weightInterpolant = s), i = s.parameterPositions, r = s.sampleValues, i[0] = a, r[0] = e, i[1] = a + t, r[1] = n, this + } + }), Qr.prototype = Object.assign(Object.create(t.prototype), { + constructor: Qr, + _bindAction: function(t, e) { + var n, i, r, o, a, s = t._localRoot || this._root, + c = t._clip.tracks, + l = c.length, + u = t._propertyBindings, + h = t._interpolants, + p = s.uuid, + d = this._bindingsByRootAndName, + f = d[p]; + for (void 0 === f && (f = {}, d[p] = f), n = 0; n !== l; ++n) { + if (void 0 !== (o = f[r = (i = c[n]).name])) u[n] = o; + else { + if (void 0 !== (o = u[n])) { + null === o._cacheIndex && (++o.referenceCount, this._addInactiveBinding(o, p, r)); + continue + } + a = e && e._propertyBindings[n].binding.parsedPath, ++(o = new Yr(Jr.create(s, r, a), i.ValueTypeName, i.getValueSize())).referenceCount, this._addInactiveBinding(o, p, r), u[n] = o + } + h[n].resultBuffer = o.buffer + } + }, + _activateAction: function(t) { + var e, n, i, r, o, a, s; + if (!this._isActiveAction(t)) { + for (null === t._cacheIndex && (e = (t._localRoot || this._root).uuid, n = t._clip.uuid, i = this._actionsByClip[n], this._bindAction(t, i && i.knownActions[0]), this._addInactiveAction(t, n, e)), o = 0, a = (r = t._propertyBindings).length; o !== a; ++o) 0 == (s = r[o]).useCount++ && (this._lendBinding(s), s.saveOriginalState()); + this._lendAction(t) + } + }, + _deactivateAction: function(t) { + var e, n, i, r; + if (this._isActiveAction(t)) { + for (n = 0, i = (e = t._propertyBindings).length; n !== i; ++n) 0 == --(r = e[n]).useCount && (r.restoreOriginalState(), this._takeBackBinding(r)); + this._takeBackAction(t) + } + }, + _initMemoryManager: function() { + this._actions = [], this._nActiveActions = 0, this._actionsByClip = {}, this._bindings = [], this._nActiveBindings = 0, this._bindingsByRootAndName = {}, this._controlInterpolants = [], this._nActiveControlInterpolants = 0; + var t = this; + this.stats = { + actions: {get total() { + return t._actions.length + }, + get inUse() { + return t._nActiveActions + } + }, + bindings: {get total() { + return t._bindings.length + }, + get inUse() { + return t._nActiveBindings + } + }, + controlInterpolants: {get total() { + return t._controlInterpolants.length + }, + get inUse() { + return t._nActiveControlInterpolants + } + } + } + }, + _isActiveAction: function(t) { + var e = t._cacheIndex; + return null !== e && e < this._nActiveActions + }, + _addInactiveAction: function(t, e, n) { + var i, r = this._actions, + o = this._actionsByClip, + a = o[e]; + void 0 === a ? (a = { + knownActions: [t], + actionByRoot: {} + }, t._byClipCacheIndex = 0, o[e] = a) : (i = a.knownActions, t._byClipCacheIndex = i.length, i.push(t)), t._cacheIndex = r.length, r.push(t), a.actionByRoot[n] = t + }, + _removeInactiveAction: function(t) { + var e, n, i, r, o, a, s = this._actions, + c = s[s.length - 1], + l = t._cacheIndex; + c._cacheIndex = l, s[l] = c, s.pop(), t._cacheIndex = null, e = t._clip.uuid, o = (r = (i = (n = this._actionsByClip)[e]).knownActions)[r.length - 1], a = t._byClipCacheIndex, o._byClipCacheIndex = a, r[a] = o, r.pop(), t._byClipCacheIndex = null, delete i.actionByRoot[(t._localRoot || this._root).uuid], 0 === r.length && delete n[e], this._removeInactiveBindingsForAction(t) + }, + _removeInactiveBindingsForAction: function(t) { + var e, n, i, r = t._propertyBindings; + for (e = 0, n = r.length; e !== n; ++e) 0 == --(i = r[e]).referenceCount && this._removeInactiveBinding(i) + }, + _lendAction: function(t) { + var e = this._actions, + n = t._cacheIndex, + i = this._nActiveActions++, + r = e[i]; + t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r + }, + _takeBackAction: function(t) { + var e = this._actions, + n = t._cacheIndex, + i = --this._nActiveActions, + r = e[i]; + t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r + }, + _addInactiveBinding: function(t, e, n) { + var i = this._bindingsByRootAndName, + r = i[e], + o = this._bindings; + void 0 === r && (r = {}, i[e] = r), r[n] = t, t._cacheIndex = o.length, o.push(t) + }, + _removeInactiveBinding: function(t) { + var e = this._bindings, + n = t.binding, + i = n.rootNode.uuid, + r = n.path, + o = this._bindingsByRootAndName, + a = o[i], + s = e[e.length - 1], + c = t._cacheIndex; + s._cacheIndex = c, e[c] = s, e.pop(), delete a[r], 0 === Object.keys(a).length && delete o[i] + }, + _lendBinding: function(t) { + var e = this._bindings, + n = t._cacheIndex, + i = this._nActiveBindings++, + r = e[i]; + t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r + }, + _takeBackBinding: function(t) { + var e = this._bindings, + n = t._cacheIndex, + i = --this._nActiveBindings, + r = e[i]; + t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r + }, + _lendControlInterpolant: function() { + var t = this._controlInterpolants, + e = this._nActiveControlInterpolants++, + n = t[e]; + return void 0 === n && ((n = new Ni(new Float32Array(2), new Float32Array(2), 1, this._controlInterpolantsResultBuffer)).__cacheIndex = e, t[e] = n), n + }, + _takeBackControlInterpolant: function(t) { + var e = this._controlInterpolants, + n = t.__cacheIndex, + i = --this._nActiveControlInterpolants, + r = e[i]; + t.__cacheIndex = i, e[i] = t, r.__cacheIndex = n, e[n] = r + }, + _controlInterpolantsResultBuffer: new Float32Array(1), + clipAction: function(t, e) { + var n, i, r = e || this._root, + o = r.uuid, + a = "string" == typeof t ? ji.findByName(r, t) : t, + s = null !== a ? a.uuid : t, + c = this._actionsByClip[s], + l = null; + if (void 0 !== c) { + if (void 0 !== (n = c.actionByRoot[o])) return n; + l = c.knownActions[0], null === a && (a = l._clip) + } + return null === a ? null : (i = new $r(this, a, e), this._bindAction(i, l), this._addInactiveAction(i, s, o), i) + }, + existingAction: function(t, e) { + var n = e || this._root, + i = n.uuid, + r = "string" == typeof t ? ji.findByName(n, t) : t, + o = r ? r.uuid : t, + a = this._actionsByClip[o]; + return void 0 !== a && a.actionByRoot[i] || null + }, + stopAllAction: function() { + var t, e = this._actions, + n = this._nActiveActions, + i = this._bindings, + r = this._nActiveBindings; + for (this._nActiveActions = 0, this._nActiveBindings = 0, t = 0; t !== n; ++t) e[t].reset(); + for (t = 0; t !== r; ++t) i[t].useCount = 0; + return this + }, + update: function(t) { + var e, n, i, r, o, a, s, c; + for (t *= this.timeScale, e = this._actions, n = this._nActiveActions, i = this.time += t, r = Math.sign(t), o = this._accuIndex ^= 1, a = 0; a !== n; ++a) e[a]._update(i, t, r, o); + for (s = this._bindings, c = this._nActiveBindings, a = 0; a !== c; ++a) s[a].apply(o); + return this + }, + setTime: function(t) { + this.time = 0; + for (var e = 0; e < this._actions.length; e++) this._actions[e].time = 0; + return this.update(t) + }, + getRoot: function() { + return this._root + }, + uncacheClip: function(t) { + var e, n, i, r, o, a, s = this._actions, + c = t.uuid, + l = this._actionsByClip, + u = l[c]; + if (void 0 !== u) { + for (n = 0, i = (e = u.knownActions).length; n !== i; ++n) r = e[n], this._deactivateAction(r), o = r._cacheIndex, a = s[s.length - 1], r._cacheIndex = null, r._byClipCacheIndex = null, a._cacheIndex = o, s[o] = a, s.pop(), this._removeInactiveBindingsForAction(r); + delete l[c] + } + }, + uncacheRoot: function(t) { + var e, n, i, r, o, a = t.uuid, + s = this._actionsByClip; + for (e in s) void 0 !== (n = s[e].actionByRoot[a]) && (this._deactivateAction(n), this._removeInactiveAction(n)); + if (void 0 !== (i = this._bindingsByRootAndName[a])) + for (r in i)(o = i[r]).restoreOriginalState(), this._removeInactiveBinding(o) + }, + uncacheAction: function(t, e) { + var n = this.existingAction(t, e); + null !== n && (this._deactivateAction(n), this._removeInactiveAction(n)) + } + }), Kr.prototype.clone = function() { + return new Kr(void 0 === this.value.clone ? this.value : this.value.clone()) + }, to.prototype = Object.assign(Object.create(Ve.prototype), { + constructor: to, + isInstancedInterleavedBuffer: 1, + copy: function(t) { + return Ve.prototype.copy.call(this, t), this.meshPerAttribute = t.meshPerAttribute, this + } + }), Object.assign(function(t, e, n, i) { + this.ray = new v(t, e), this.near = n || 0, this.far = i || 1 / 0, this.camera = null, this.params = { + Mesh: {}, + Line: {}, + LOD: {}, + Points: { + threshold: 1 + }, + Sprite: {} + }, Object.defineProperties(this.params, { + PointCloud: { + get: function() { + return this.Points + } + } + }) + }.prototype, { + linePrecision: 1, + set: function(t, e) { + this.ray.set(t, e) + }, + setFromCamera: function(t, e) { + e && e.isPerspectiveCamera ? (this.ray.origin.setFromMatrixPosition(e.matrixWorld), this.ray.direction.set(t.x, t.y, .5).unproject(e).sub(this.ray.origin).normalize(), this.camera = e) : e && e.isOrthographicCamera && (this.ray.origin.set(t.x, t.y, (e.near + e.far) / (e.near - e.far)).unproject(e), this.ray.direction.set(0, 0, -1).transformDirection(e.matrixWorld), this.camera = e) + }, + intersectObject: function(t, e, n) { + var i = n || []; + return no(t, this, i, e), i.sort(eo), i + }, + intersectObjects: function(t, e, n) { + var i, r, o = n || []; + if (0 == Array.isArray(t)) return o; + for (i = 0, r = t.length; i < r; i++) no(t[i], this, o, e); + return o.sort(eo), o + } + }), Object.assign(function(t, e, n) { + return this.radius = void 0 !== t ? t : 1, this.phi = void 0 !== e ? e : 0, this.theta = void 0 !== n ? n : 0, this + }.prototype, { + set: function(t, e, n) { + return this.radius = t, this.phi = e, this.theta = n, this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + return this.radius = t.radius, this.phi = t.phi, this.theta = t.theta, this + }, + makeSafe: function() { + return this.phi = Math.max(1e-6, Math.min(Math.PI - 1e-6, this.phi)), this + }, + setFromVector3: function(t) { + return this.setFromCartesianCoords(t.x, t.y, t.z) + }, + setFromCartesianCoords: function(t, e, n) { + return this.radius = Math.sqrt(t * t + e * e + n * n), 0 === this.radius ? (this.theta = 0, this.phi = 0) : (this.theta = Math.atan2(t, n), this.phi = Math.acos(ic.clamp(e / this.radius, -1, 1))), this + } + }), Object.assign(function(t, e, n) { + return this.radius = void 0 !== t ? t : 1, this.theta = void 0 !== e ? e : 0, this.y = void 0 !== n ? n : 0, this + }.prototype, { + set: function(t, e, n) { + return this.radius = t, this.theta = e, this.y = n, this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + return this.radius = t.radius, this.theta = t.theta, this.y = t.y, this + }, + setFromVector3: function(t) { + return this.setFromCartesianCoords(t.x, t.y, t.z) + }, + setFromCartesianCoords: function(t, e, n) { + return this.radius = Math.sqrt(t * t + n * n), this.theta = Math.atan2(t, n), this.y = e, this + } + }), Ch = new e, Object.assign(io.prototype, { + set: function(t, e) { + return this.min.copy(t), this.max.copy(e), this + }, + setFromPoints: function(t) { + this.makeEmpty(); + for (var e = 0, n = t.length; e < n; e++) this.expandByPoint(t[e]); + return this + }, + setFromCenterAndSize: function(t, e) { + var n = Ch.copy(e).multiplyScalar(.5); + return this.min.copy(t).sub(n), this.max.copy(t).add(n), this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + return this.min.copy(t.min), this.max.copy(t.max), this + }, + makeEmpty: function() { + return this.min.x = this.min.y = 1 / 0, this.max.x = this.max.y = -1 / 0, this + }, + isEmpty: function() { + return this.max.x < this.min.x || this.max.y < this.min.y + }, + getCenter: function(t) { + return void 0 === t && (t = new e), this.isEmpty() ? t.set(0, 0) : t.addVectors(this.min, this.max).multiplyScalar(.5) + }, + getSize: function(t) { + return void 0 === t && (t = new e), this.isEmpty() ? t.set(0, 0) : t.subVectors(this.max, this.min) + }, + expandByPoint: function(t) { + return this.min.min(t), this.max.max(t), this + }, + expandByVector: function(t) { + return this.min.sub(t), this.max.add(t), this + }, + expandByScalar: function(t) { + return this.min.addScalar(-t), this.max.addScalar(t), this + }, + containsPoint: function(t) { + return t.x < this.min.x || t.x > this.max.x || t.y < this.min.y || t.y > this.max.y ? 0 : 1 + }, + containsBox: function(t) { + return this.min.x <= t.min.x && t.max.x <= this.max.x && this.min.y <= t.min.y && t.max.y <= this.max.y + }, + getParameter: function(t, n) { + return void 0 === n && (n = new e), n.set((t.x - this.min.x) / (this.max.x - this.min.x), (t.y - this.min.y) / (this.max.y - this.min.y)) + }, + intersectsBox: function(t) { + return t.max.x < this.min.x || t.min.x > this.max.x || t.max.y < this.min.y || t.min.y > this.max.y ? 0 : 1 + }, + clampPoint: function(t, n) { + return void 0 === n && (n = new e), n.copy(t).clamp(this.min, this.max) + }, + distanceToPoint: function(t) { + return Ch.copy(t).clamp(this.min, this.max).sub(t).length() + }, + intersect: function(t) { + return this.min.max(t.min), this.max.min(t.max), this + }, + union: function(t) { + return this.min.min(t.min), this.max.max(t.max), this + }, + translate: function(t) { + return this.min.add(t), this.max.add(t), this + }, + equals: function(t) { + return t.min.equals(this.min) && t.max.equals(this.max) + } + }), Ph = new i, Eh = new i, Object.assign(ro.prototype, { + set: function(t, e) { + return this.start.copy(t), this.end.copy(e), this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + return this.start.copy(t.start), this.end.copy(t.end), this + }, + getCenter: function(t) { + return void 0 === t && (t = new i), t.addVectors(this.start, this.end).multiplyScalar(.5) + }, + delta: function(t) { + return void 0 === t && (t = new i), t.subVectors(this.end, this.start) + }, + distanceSq: function() { + return this.start.distanceToSquared(this.end) + }, + distance: function() { + return this.start.distanceTo(this.end) + }, + at: function(t, e) { + return void 0 === e && (e = new i), this.delta(e).multiplyScalar(t).add(this.start) + }, + closestPointToPointParameter: function(t, e) { + var n, i; + return Ph.subVectors(t, this.start), Eh.subVectors(this.end, this.start), n = Eh.dot(Eh), i = Eh.dot(Ph) / n, e && (i = ic.clamp(i, 0, 1)), i + }, + closestPointToPoint: function(t, e, n) { + var r = this.closestPointToPointParameter(t, e); + return void 0 === n && (n = new i), this.delta(n).multiplyScalar(r).add(this.start) + }, + applyMatrix4: function(t) { + return this.start.applyMatrix4(t), this.end.applyMatrix4(t), this + }, + equals: function(t) { + return t.start.equals(this.start) && t.end.equals(this.end) + } + }), oo.prototype = Object.create(p.prototype), oo.prototype.constructor = oo, oo.prototype.isImmediateRenderObject = 1, Nh = new i, Oh = new i, Dh = new r, Ih = ["a", "b", "c"], ao.prototype = Object.create(tn.prototype), ao.prototype.constructor = ao, ao.prototype.update = function() { + var t, e, n, i, r, o, a, s, c, l, u, h, p, d, f; + if (this.object.updateMatrixWorld(1), Dh.getNormalMatrix(this.object.matrixWorld), t = this.object.matrixWorld, e = this.geometry.attributes.position, (n = this.object.geometry) && n.isGeometry) + for (i = n.vertices, o = 0, a = 0, s = (r = n.faces).length; a < s; a++) + for (l = 0, u = (c = r[a]).vertexNormals.length; l < u; l++) h = i[c[Ih[l]]], p = c.vertexNormals[l], Nh.copy(h).applyMatrix4(t), Oh.copy(p).applyMatrix3(Dh).normalize().multiplyScalar(this.size).add(Nh), e.setXYZ(o, Nh.x, Nh.y, Nh.z), o += 1, e.setXYZ(o, Oh.x, Oh.y, Oh.z), o += 1; + else if (n && n.isBufferGeometry) + for (d = n.attributes.position, f = n.attributes.normal, o = 0, l = 0, u = d.count; l < u; l++) Nh.set(d.getX(l), d.getY(l), d.getZ(l)).applyMatrix4(t), Oh.set(f.getX(l), f.getY(l), f.getZ(l)), Oh.applyMatrix3(Dh).normalize().multiplyScalar(this.size).add(Nh), e.setXYZ(o, Nh.x, Nh.y, Nh.z), o += 1, e.setXYZ(o, Oh.x, Oh.y, Oh.z), o += 1; + e.needsUpdate = 1 + }, zh = new i, so.prototype = Object.create(p.prototype), so.prototype.constructor = so, so.prototype.dispose = function() { + this.cone.geometry.dispose(), this.cone.material.dispose() + }, so.prototype.update = function() { + var t, e; + this.light.updateMatrixWorld(), e = (t = this.light.distance ? this.light.distance : 1e3) * Math.tan(this.light.angle), this.cone.scale.set(e, e, t), zh.setFromMatrixPosition(this.light.target.matrixWorld), this.cone.lookAt(zh), void 0 !== this.color ? this.cone.material.color.set(this.color) : this.cone.material.color.copy(this.light.color) + }, Rh = new i, Fh = new l, kh = new l, co.prototype = Object.create(tn.prototype), co.prototype.constructor = co, co.prototype.updateMatrixWorld = function(t) { + var e, n, i, r = this.bones, + o = this.geometry, + a = o.getAttribute("position"); + for (kh.getInverse(this.root.matrixWorld), e = 0, n = 0; e < r.length; e++)(i = r[e]).parent && i.parent.isBone && (Fh.multiplyMatrices(kh, i.matrixWorld), Rh.setFromMatrixPosition(Fh), a.setXYZ(n, Rh.x, Rh.y, Rh.z), Fh.multiplyMatrices(kh, i.parent.matrixWorld), Rh.setFromMatrixPosition(Fh), a.setXYZ(n + 1, Rh.x, Rh.y, Rh.z), n += 2); + o.getAttribute("position").needsUpdate = 1, p.prototype.updateMatrixWorld.call(this, t) + }, lo.prototype = Object.create(B.prototype), lo.prototype.constructor = lo, lo.prototype.dispose = function() { + this.geometry.dispose(), this.material.dispose() + }, lo.prototype.update = function() { + void 0 !== this.color ? this.material.color.set(this.color) : this.material.color.copy(this.light.color) + }, uo.prototype = Object.create(Ke.prototype), uo.prototype.constructor = uo, uo.prototype.update = function() { + var t, e; + this.scale.set(.5 * this.light.width, .5 * this.light.height, 1), void 0 !== this.color ? (this.material.color.set(this.color), this.children[0].material.color.set(this.color)) : (this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity), t = this.material.color, (e = Math.max(t.r, t.g, t.b)) > 1 && t.multiplyScalar(1 / e), this.children[0].material.color.copy(this.material.color)) + }, uo.prototype.dispose = function() { + this.geometry.dispose(), this.material.dispose(), this.children[0].geometry.dispose(), this.children[0].material.dispose() + }, Bh = new i, Uh = new x, jh = new x, ho.prototype = Object.create(p.prototype), ho.prototype.constructor = ho, ho.prototype.dispose = function() { + this.children[0].geometry.dispose(), this.children[0].material.dispose() + }, ho.prototype.update = function() { + var t, e, n, i, r = this.children[0]; + if (void 0 !== this.color) this.material.color.set(this.color); + else { + for (t = r.geometry.getAttribute("color"), Uh.copy(this.light.color), jh.copy(this.light.groundColor), e = 0, n = t.count; e < n; e++) i = e < n / 2 ? Uh : jh, t.setXYZ(e, i.r, i.g, i.b); + t.needsUpdate = 1 + } + r.lookAt(Bh.setFromMatrixPosition(this.light.matrixWorld).negate()) + }, po.prototype = Object.create(B.prototype), po.prototype.constructor = po, po.prototype.dispose = function() { + this.geometry.dispose(), this.material.dispose() + }, po.prototype.onBeforeRender = function() { + this.position.copy(this.lightProbe.position), this.scale.set(1, 1, 1).multiplyScalar(this.size), this.material.uniforms.intensity.value = this.lightProbe.intensity + }, fo.prototype = Object.assign(Object.create(tn.prototype), { + constructor: fo, + copy: function(t) { + return tn.prototype.copy.call(this, t), this.geometry.copy(t.geometry), this.material.copy(t.material), this + }, + clone: function() { + return (new this.constructor).copy(this) + } + }), mo.prototype = Object.create(tn.prototype), mo.prototype.constructor = mo, go.prototype = Object.create(Ke.prototype), go.prototype.constructor = go, go.prototype.update = function() { + function t(t, i, o, a) { + var s = (i - t) / o; + for (f.setXYZ(h, 0, 0, 0), p++, e = t; e < i; e += s) n = h + p, f.setXYZ(n, Math.sin(e) * r, 0, Math.cos(e) * r), f.setXYZ(n + 1, Math.sin(Math.min(e + s, i)) * r, 0, Math.cos(Math.min(e + s, i)) * r), f.setXYZ(n + 2, 0, 0, 0), p += 3; + d.addGroup(h, p, a), h += p, p = 0 + } + var e, n, i = this.audio, + r = this.range, + o = this.divisionsInnerAngle, + a = this.divisionsOuterAngle, + s = ic.degToRad(i.panner.coneInnerAngle), + c = ic.degToRad(i.panner.coneOuterAngle), + l = s / 2, + u = c / 2, + h = 0, + p = 0, + d = this.geometry, + f = d.attributes.position; + d.clearGroups(), t(-u, -l, a, 0), t(-l, l, o, 1), t(l, u, a, 0), f.needsUpdate = 1, s === c && (this.material[0].visible = 0) + }, go.prototype.dispose = function() { + this.geometry.dispose(), this.material[0].dispose(), this.material[1].dispose() + }, Vh = new i, Gh = new i, Wh = new r, vo.prototype = Object.create(tn.prototype), vo.prototype.constructor = vo, vo.prototype.update = function() { + var t, e, n, i, r, o, a, s, c, l; + for (this.object.updateMatrixWorld(1), Wh.getNormalMatrix(this.object.matrixWorld), t = this.object.matrixWorld, e = this.geometry.attributes.position, i = (n = this.object.geometry).vertices, o = 0, a = 0, s = (r = n.faces).length; a < s; a++) l = (c = r[a]).normal, Vh.copy(i[c.a]).add(i[c.b]).add(i[c.c]).divideScalar(3).applyMatrix4(t), Gh.copy(l).applyMatrix3(Wh).normalize().multiplyScalar(this.size).add(Vh), e.setXYZ(o, Vh.x, Vh.y, Vh.z), o += 1, e.setXYZ(o, Gh.x, Gh.y, Gh.z), o += 1; + e.needsUpdate = 1 + }, Hh = new i, qh = new i, Xh = new i, yo.prototype = Object.create(p.prototype), yo.prototype.constructor = yo, yo.prototype.dispose = function() { + this.lightPlane.geometry.dispose(), this.lightPlane.material.dispose(), this.targetLine.geometry.dispose(), this.targetLine.material.dispose() + }, yo.prototype.update = function() { + Hh.setFromMatrixPosition(this.light.matrixWorld), qh.setFromMatrixPosition(this.light.target.matrixWorld), Xh.subVectors(qh, Hh), this.lightPlane.lookAt(qh), void 0 !== this.color ? (this.lightPlane.material.color.set(this.color), this.targetLine.material.color.set(this.color)) : (this.lightPlane.material.color.copy(this.light.color), this.targetLine.material.color.copy(this.light.color)), this.targetLine.lookAt(qh), this.targetLine.scale.z = Xh.length() + }, Yh = new i, Zh = new q, xo.prototype = Object.create(tn.prototype), xo.prototype.constructor = xo, xo.prototype.update = function() { + var t = this.geometry, + e = this.pointMap; + Zh.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse), bo("c", e, t, Zh, 0, 0, -1), bo("t", e, t, Zh, 0, 0, 1), bo("n1", e, t, Zh, -1, -1, -1), bo("n2", e, t, Zh, 1, -1, -1), bo("n3", e, t, Zh, -1, 1, -1), bo("n4", e, t, Zh, 1, 1, -1), bo("f1", e, t, Zh, -1, -1, 1), bo("f2", e, t, Zh, 1, -1, 1), bo("f3", e, t, Zh, -1, 1, 1), bo("f4", e, t, Zh, 1, 1, 1), bo("u1", e, t, Zh, .7, 1.1, -1), bo("u2", e, t, Zh, -.7, 1.1, -1), bo("u3", e, t, Zh, 0, 2, -1), bo("cf1", e, t, Zh, -1, 0, 1), bo("cf2", e, t, Zh, 1, 0, 1), bo("cf3", e, t, Zh, 0, -1, 1), bo("cf4", e, t, Zh, 0, 1, 1), bo("cn1", e, t, Zh, -1, 0, -1), bo("cn2", e, t, Zh, 1, 0, -1), bo("cn3", e, t, Zh, 0, -1, -1), bo("cn4", e, t, Zh, 0, 1, -1), t.getAttribute("position").needsUpdate = 1 + }, Jh = new f, _o.prototype = Object.create(tn.prototype), _o.prototype.constructor = _o, _o.prototype.update = function() { + var t, e, n, i; + void 0 !== this.object && Jh.setFromObject(this.object), Jh.isEmpty() || (t = Jh.min, e = Jh.max, (i = (n = this.geometry.attributes.position).array)[0] = e.x, i[1] = e.y, i[2] = e.z, i[3] = t.x, i[4] = e.y, i[5] = e.z, i[6] = t.x, i[7] = t.y, i[8] = e.z, i[9] = e.x, i[10] = t.y, i[11] = e.z, i[12] = e.x, i[13] = e.y, i[14] = t.z, i[15] = t.x, i[16] = e.y, i[17] = t.z, i[18] = t.x, i[19] = t.y, i[20] = t.z, i[21] = e.x, i[22] = t.y, i[23] = t.z, n.needsUpdate = 1, this.geometry.computeBoundingSphere()) + }, _o.prototype.setFromObject = function(t) { + return this.object = t, this.update(), this + }, _o.prototype.copy = function(t) { + return tn.prototype.copy.call(this, t), this.object = t.object, this + }, _o.prototype.clone = function() { + return (new this.constructor).copy(this) + }, wo.prototype = Object.create(tn.prototype), wo.prototype.constructor = wo, wo.prototype.updateMatrixWorld = function(t) { + var e = this.box; + e.isEmpty() || (e.getCenter(this.position), e.getSize(this.scale), this.scale.multiplyScalar(.5), p.prototype.updateMatrixWorld.call(this, t)) + }, Mo.prototype = Object.create(Ke.prototype), Mo.prototype.constructor = Mo, Mo.prototype.updateMatrixWorld = function(t) { + var e = -this.plane.constant; + Math.abs(e) < 1e-8 && (e = 1e-8), this.scale.set(.5 * this.size, .5 * this.size, e), this.children[0].material.side = e < 0 ? jo : Uo, this.lookAt(this.plane.normal), p.prototype.updateMatrixWorld.call(this, t) + }, $h = new i, So.prototype = Object.create(p.prototype), So.prototype.constructor = So, So.prototype.setDirection = function(t) { + if (t.y > .99999) this.quaternion.set(0, 0, 0, 1); + else if (t.y < -.99999) this.quaternion.set(1, 0, 0, 0); + else { + $h.set(t.z, 0, -t.x).normalize(); + var e = Math.acos(t.y); + this.quaternion.setFromAxisAngle($h, e) + } + }, So.prototype.setLength = function(t, e, n) { + void 0 === e && (e = .2 * t), void 0 === n && (n = .2 * e), this.line.scale.set(1, Math.max(1e-4, t - e), 1), this.line.updateMatrix(), this.cone.scale.set(n, e, n), this.cone.position.y = t, this.cone.updateMatrix() + }, So.prototype.setColor = function(t) { + this.line.material.color.set(t), this.cone.material.color.set(t) + }, So.prototype.copy = function(t) { + return p.prototype.copy.call(this, t, 0), this.line.copy(t.line), this.cone.copy(t.cone), this + }, So.prototype.clone = function() { + return (new this.constructor).copy(this) + }, To.prototype = Object.create(tn.prototype), To.prototype.constructor = To, Qi.create = function(t, e) { + return t.prototype = Object.create(Qi.prototype), t.prototype.constructor = t, t.prototype.getPoint = e, t + }, Object.assign(dr.prototype, { + createPointsGeometry: function(t) { + var e = this.getPoints(t); + return this.createGeometry(e) + }, + createSpacedPointsGeometry: function(t) { + var e = this.getSpacedPoints(t); + return this.createGeometry(e) + }, + createGeometry: function(t) { + var e, n, r, o; + for (e = new V, n = 0, r = t.length; n < r; n++) o = t[n], e.vertices.push(new i(o.x, o.y, o.z || 0)); + return e + } + }), Object.assign(fr.prototype, { + fromPoints: function(t) { + this.setFromPoints(t) + } + }), Ao.prototype = Object.create(nr.prototype), Object.assign(Ao.prototype, { + initFromArray: function() {}, + getControlPointsArray: function() {}, + reparametrizeByArcLength: function() {} + }), fo.prototype.setColors = function() {}, co.prototype.update = function() {}, Object.assign(Wi.prototype, { + extractUrlBase: function(t) { + return rh(t) + } + }), Wi.Handlers = { + add: function() {}, + get: function() {} + }, Object.assign(Or.prototype, { + setTexturePath: function(t) { + return this.setResourcePath(t) + } + }), Object.assign(io.prototype, { + center: function(t) { + return this.getCenter(t) + }, + empty: function() { + return this.isEmpty() + }, + isIntersectionBox: function(t) { + return this.intersectsBox(t) + }, + size: function(t) { + return this.getSize(t) + } + }), Object.assign(f.prototype, { + center: function(t) { + return this.getCenter(t) + }, + empty: function() { + return this.isEmpty() + }, + isIntersectionBox: function(t) { + return this.intersectsBox(t) + }, + isIntersectionSphere: function(t) { + return this.intersectsSphere(t) + }, + size: function(t) { + return this.getSize(t) + } + }), ro.prototype.center = function(t) { + return this.getCenter(t) + }, Object.assign(ic, { + random16: function() { + return Math.random() + }, + nearestPowerOfTwo: function(t) { + return ic.floorPowerOfTwo(t) + }, + nextPowerOfTwo: function(t) { + return ic.ceilPowerOfTwo(t) + } + }), Object.assign(r.prototype, { + flattenToArrayOffset: function(t, e) { + return this.toArray(t, e) + }, + multiplyVector3: function(t) { + return t.applyMatrix3(this) + }, + multiplyVector3Array: function() {}, + applyToBuffer: function(t) { + return this.applyToBufferAttribute(t) + }, + applyToVector3Array: function() {} + }), Object.assign(l.prototype, { + extractPosition: function(t) { + return this.copyPosition(t) + }, + flattenToArrayOffset: function(t, e) { + return this.toArray(t, e) + }, + getPosition: function() { + return (new i).setFromMatrixColumn(this, 3) + }, + setRotationFromQuaternion: function(t) { + return this.makeRotationFromQuaternion(t) + }, + multiplyToArray: function() {}, + multiplyVector3: function(t) { + return t.applyMatrix4(this) + }, + multiplyVector4: function(t) { + return t.applyMatrix4(this) + }, + multiplyVector3Array: function() {}, + rotateAxis: function(t) { + t.transformDirection(this) + }, + crossVector: function(t) { + return t.applyMatrix4(this) + }, + translate: function() {}, + rotateX: function() {}, + rotateY: function() {}, + rotateZ: function() {}, + rotateByAxis: function() {}, + applyToBuffer: function(t) { + return this.applyToBufferAttribute(t) + }, + applyToVector3Array: function() {}, + makeFrustum: function(t, e, n, i, r, o) { + return this.makePerspective(t, e, i, n, r, o) + } + }), $.prototype.isIntersectionLine = function(t) { + return this.intersectsLine(t) + }, n.prototype.multiplyVector3 = function(t) { + return t.applyQuaternion(this) + }, Object.assign(v.prototype, { + isIntersectionBox: function(t) { + return this.intersectsBox(t) + }, + isIntersectionPlane: function(t) { + return this.intersectsPlane(t) + }, + isIntersectionSphere: function(t) { + return this.intersectsSphere(t) + } + }), Object.assign(y.prototype, { + area: function() { + return this.getArea() + }, + barycoordFromPoint: function(t, e) { + return this.getBarycoord(t, e) + }, + midpoint: function(t) { + return this.getMidpoint(t) + }, + normal: function(t) { + return this.getNormal(t) + }, + plane: function(t) { + return this.getPlane(t) + } + }), Object.assign(y, { + barycoordFromPoint: function(t, e, n, i, r) { + return y.getBarycoord(t, e, n, i, r) + }, + normal: function(t, e, n, i) { + return y.getNormal(t, e, n, i) + } + }), Object.assign(mr.prototype, { + extractAllPoints: function(t) { + return this.extractPoints(t) + }, + extrude: function(t) { + return new Qn(this, t) + }, + makeGeometry: function(t) { + return new li(this, t) + } + }), Object.assign(e.prototype, { + fromAttribute: function(t, e, n) { + return this.fromBufferAttribute(t, e, n) + }, + distanceToManhattan: function(t) { + return this.manhattanDistanceTo(t) + }, + lengthManhattan: function() { + return this.manhattanLength() + } + }), Object.assign(i.prototype, { + setEulerFromRotationMatrix: function() {}, + setEulerFromQuaternion: function() {}, + getPositionFromMatrix: function(t) { + return this.setFromMatrixPosition(t) + }, + getScaleFromMatrix: function(t) { + return this.setFromMatrixScale(t) + }, + getColumnFromMatrix: function(t, e) { + return this.setFromMatrixColumn(e, t) + }, + applyProjection: function(t) { + return this.applyMatrix4(t) + }, + fromAttribute: function(t, e, n) { + return this.fromBufferAttribute(t, e, n) + }, + distanceToManhattan: function(t) { + return this.manhattanDistanceTo(t) + }, + lengthManhattan: function() { + return this.manhattanLength() + } + }), Object.assign(a.prototype, { + fromAttribute: function(t, e, n) { + return this.fromBufferAttribute(t, e, n) + }, + lengthManhattan: function() { + return this.manhattanLength() + } + }), Object.assign(V.prototype, { + computeTangents: function() {}, + computeLineDistances: function() {} + }), Object.assign(p.prototype, { + getChildByName: function(t) { + return this.getObjectByName(t) + }, + renderDepth: function() {}, + translate: function(t, e) { + return this.translateOnAxis(e, t) + }, + getWorldRotation: function() {} + }), Object.defineProperties(p.prototype, { + eulerOrder: { + get: function() { + return this.rotation.order + }, + set: function(t) { + this.rotation.order = t + } + }, + useQuaternion: { + get: function() {}, + set: function() {} + } + }), Object.defineProperties(Xe.prototype, { + objects: { + get: function() { + return this.levels + } + } + }), Object.defineProperty(Ze.prototype, "useVertexTexture", { + get: function() {}, + set: function() {} + }), Ye.prototype.initBones = function() {}, Object.defineProperty(Qi.prototype, "__arcLengthDivisions", { + get: function() { + return this.arcLengthDivisions + }, + set: function(t) { + this.arcLengthDivisions = t + } + }), X.prototype.setLens = function(t, e) { + void 0 !== e && (this.filmGauge = e), this.setFocalLength(t) + }, Object.defineProperties(gr.prototype, { + onlyShadow: { + set: function() {} + }, + shadowCameraFov: { + set: function(t) { + this.shadow.camera.fov = t + } + }, + shadowCameraLeft: { + set: function(t) { + this.shadow.camera.left = t + } + }, + shadowCameraRight: { + set: function(t) { + this.shadow.camera.right = t + } + }, + shadowCameraTop: { + set: function(t) { + this.shadow.camera.top = t + } + }, + shadowCameraBottom: { + set: function(t) { + this.shadow.camera.bottom = t + } + }, + shadowCameraNear: { + set: function(t) { + this.shadow.camera.near = t + } + }, + shadowCameraFar: { + set: function(t) { + this.shadow.camera.far = t + } + }, + shadowCameraVisible: { + set: function() {} + }, + shadowBias: { + set: function(t) { + this.shadow.bias = t + } + }, + shadowDarkness: { + set: function() {} + }, + shadowMapWidth: { + set: function(t) { + this.shadow.mapSize.width = t + } + }, + shadowMapHeight: { + set: function(t) { + this.shadow.mapSize.height = t + } + } + }), Object.defineProperties(A.prototype, { + length: { + get: function() { + return this.array.length + } + } + }), Object.assign(A.prototype, { + copyIndicesArray: function() {}, + setArray: function(t) { + return this.count = void 0 !== t ? t.length / this.itemSize : 0, this.array = t, this + } + }), Object.assign(k.prototype, { + addIndex: function(t) { + this.setIndex(t) + }, + addDrawCall: function(t, e) { + this.addGroup(t, e) + }, + clearDrawCalls: function() { + this.clearGroups() + }, + computeTangents: function() {}, + computeOffsets: function() {} + }), Object.defineProperties(k.prototype, { + drawcalls: { + get: function() { + return this.groups + } + }, + offsets: { + get: function() { + return this.groups + } + } + }), Object.assign(Ve.prototype, { + setArray: function(t) { + return this.count = void 0 !== t ? t.length / this.stride : 0, this.array = t, this + } + }), Object.assign(Kn.prototype, { + getArrays: function() {}, + addShapeList: function() {}, + addShape: function() {} + }), Object.defineProperties(Kr.prototype, { + dynamic: { + set: function() {} + }, + onUpdate: { + value: function() { + return this + } + } + }), Object.defineProperties(S.prototype, { + wrapAround: { + get: function() {}, + set: function() {} + }, + overdraw: { + get: function() {}, + set: function() {} + }, + wrapRGB: { + get: function() { + return new x + } + }, + shading: { + get: function() {}, + set: function(t) { + this.flatShading = 1 === t + } + }, + stencilMask: { + get: function() { + return this.stencilFuncMask + }, + set: function(t) { + this.stencilFuncMask = t + } + } + }), Object.defineProperties(Mi.prototype, { + metal: { + get: function() { + return 0 + }, + set: function() {} + } + }), Object.defineProperties(H.prototype, { + derivatives: { + get: function() { + return this.extensions.derivatives + }, + set: function(t) { + this.extensions.derivatives = t + } + } + }), Object.assign(Be.prototype, { + clearTarget: function(t, e, n, i) { + this.setRenderTarget(t), this.clear(e, n, i) + }, + animate: function(t) { + this.setAnimationLoop(t) + }, + getCurrentRenderTarget: function() { + return this.getRenderTarget() + }, + getMaxAnisotropy: function() { + return this.capabilities.getMaxAnisotropy() + }, + getPrecision: function() { + return this.capabilities.precision + }, + resetGLState: function() { + return this.state.reset() + }, + supportsFloatTextures: function() { + return this.extensions.get("OES_texture_float") + }, + supportsHalfFloatTextures: function() { + return this.extensions.get("OES_texture_half_float") + }, + supportsStandardDerivatives: function() { + return this.extensions.get("OES_standard_derivatives") + }, + supportsCompressedTextureS3TC: function() { + return this.extensions.get("WEBGL_compressed_texture_s3tc") + }, + supportsCompressedTexturePVRTC: function() { + return this.extensions.get("WEBGL_compressed_texture_pvrtc") + }, + supportsBlendMinMax: function() { + return this.extensions.get("EXT_blend_minmax") + }, + supportsVertexTextures: function() { + return this.capabilities.vertexTextures + }, + supportsInstancedArrays: function() { + return this.extensions.get("ANGLE_instanced_arrays") + }, + enableScissorTest: function(t) { + this.setScissorTest(t) + }, + initMaterial: function() {}, + addPrePlugin: function() {}, + addPostPlugin: function() {}, + updateShadowMap: function() {}, + setFaceCulling: function() {}, + allocTextureUnit: function() {}, + setTexture: function() {}, + setTexture2D: function() {}, + setTextureCube: function() {}, + getActiveMipMapLevel: function() { + return this.getActiveMipmapLevel() + } + }), Object.defineProperties(Be.prototype, { + shadowMapEnabled: { + get: function() { + return this.shadowMap.enabled + }, + set: function(t) { + this.shadowMap.enabled = t + } + }, + shadowMapType: { + get: function() { + return this.shadowMap.type + }, + set: function(t) { + this.shadowMap.type = t + } + }, + shadowMapCullFace: { + get: function() {}, + set: function() {} + }, + context: { + get: function() { + return this.getContext() + } + } + }), Object.defineProperties(Ce.prototype, { + cullFace: { + get: function() {}, + set: function() {} + }, + renderReverseSided: { + get: function() {}, + set: function() {} + }, + renderSingleSided: { + get: function() {}, + set: function() {} + } + }), Object.defineProperties(Z.prototype, { + activeCubeFace: { + set: function() {} + }, + activeMipMapLevel: { + set: function() {} + } + }), Object.defineProperties(s.prototype, { + wrapS: { + get: function() { + return this.texture.wrapS + }, + set: function(t) { + this.texture.wrapS = t + } + }, + wrapT: { + get: function() { + return this.texture.wrapT + }, + set: function(t) { + this.texture.wrapT = t + } + }, + magFilter: { + get: function() { + return this.texture.magFilter + }, + set: function(t) { + this.texture.magFilter = t + } + }, + minFilter: { + get: function() { + return this.texture.minFilter + }, + set: function(t) { + this.texture.minFilter = t + } + }, + anisotropy: { + get: function() { + return this.texture.anisotropy + }, + set: function(t) { + this.texture.anisotropy = t + } + }, + offset: { + get: function() { + return this.texture.offset + }, + set: function(t) { + this.texture.offset = t + } + }, + repeat: { + get: function() { + return this.texture.repeat + }, + set: function(t) { + this.texture.repeat = t + } + }, + format: { + get: function() { + return this.texture.format + }, + set: function(t) { + this.texture.format = t + } + }, + type: { + get: function() { + return this.texture.type + }, + set: function(t) { + this.texture.type = t + } + }, + generateMipmaps: { + get: function() { + return this.texture.generateMipmaps + }, + set: function(t) { + this.texture.generateMipmaps = t + } + } + }), Object.defineProperties(Fe.prototype, { + standing: { + set: function() {} + }, + userHeight: { + set: function() {} + } + }), Hr.prototype.load = function(t) { + var e; + return e = this, (new kr).load(t, function(t) { + e.setBuffer(t) + }), this + }, Xr.prototype.getData = function() { + return this.getFrequencyData() + }, Y.prototype.updateCubeMap = function(t, e) { + return this.update(t, e) + }, cc.crossOrigin = void 0, cc.loadTexture = function(t, e, n, i) { + var r, o; + return (r = new $i).setCrossOrigin(this.crossOrigin), o = r.load(t, n, void 0, i), e && (o.mapping = e), o + }, cc.loadTextureCube = function(t, e, n, i) { + var r, o; + return (r = new Ji).setCrossOrigin(this.crossOrigin), o = r.load(t, n, void 0, i), e && (o.mapping = e), o + }, cc.loadCompressedTexture = function() {}, cc.loadCompressedTextureCube = function() {}, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register", { + detail: { + revision: "109" + } + })), (tp = function() {}).prototype = { + constructor: tp, + parse: (cp = new i, lp = new r, function(t, e) { + var n, i, r, o, a, s, c, l, u, h, p, d, f, m, g, v, y; + if (void 0 === e && (e = {}), n = void 0 !== e.binary ? e.binary : 0, i = [], r = 0, t.traverse(function(t) { + if (t.isMesh) { + var e = t.geometry; + e.isBufferGeometry && (e = (new V).fromBufferGeometry(e)), e.isGeometry && (r += e.faces.length, i.push({ + geometry: e, + matrixWorld: t.matrixWorld + })) + } + }), n) { + for (o = 80, a = new ArrayBuffer(2 * r + 3 * r * 4 * 4 + 80 + 4), (s = new DataView(a)).setUint32(o, r, 1), o += 4, c = 0, l = i.length; c < l; c++) + for (h = (u = i[c]).geometry.vertices, p = u.geometry.faces, d = u.matrixWorld, lp.getNormalMatrix(d), f = 0, m = p.length; f < m; f++) { + for (g = p[f], cp.copy(g.normal).applyMatrix3(lp).normalize(), s.setFloat32(o, cp.x, 1), o += 4, s.setFloat32(o, cp.y, 1), o += 4, s.setFloat32(o, cp.z, 1), o += 4, v = [g.a, g.b, g.c], y = 0; y < 3; y++) cp.copy(h[v[y]]).applyMatrix4(d), s.setFloat32(o, cp.x, 1), o += 4, s.setFloat32(o, cp.y, 1), o += 4, s.setFloat32(o, cp.z, 1), o += 4; + s.setUint16(o, 0, 1), o += 2 + } + return s + } + for (s = "", s += "solid exported\n", c = 0, l = i.length; c < l; c++) + for (h = (u = i[c]).geometry.vertices, p = u.geometry.faces, d = u.matrixWorld, lp.getNormalMatrix(d), f = 0, m = p.length; f < m; f++) { + for (g = p[f], cp.copy(g.normal).applyMatrix3(lp).normalize(), s += "\tfacet normal " + cp.x + " " + cp.y + " " + cp.z + "\n", s += "\t\touter loop\n", v = [g.a, g.b, g.c], y = 0; y < 3; y++) cp.copy(h[v[y]]).applyMatrix4(d), s += "\t\t\tvertex " + cp.x + " " + cp.y + " " + cp.z + "\n"; + s += "\t\tendloop\n", s += "\tendfacet\n" + } + return s + "endsolid exported\n" + }) + }, (ep = function() {}).prototype = { + constructor: ep, + parse: function(t) { + var n, o, a, s, c, l = "", + u = 0, + h = 0, + p = 0, + d = new i, + f = new i, + m = new e, + g = []; + return t.traverse(function(t) { + t instanceof B && function(t) { + var e, i, a, v, y = 0, + x = 0, + b = 0, + _ = t.geometry, + w = new r; + if (_.isGeometry && (_ = (new k).setFromObject(t)), _.isBufferGeometry) { + if (e = _.getAttribute("position"), i = _.getAttribute("normal"), a = _.getAttribute("uv"), v = _.getIndex(), l += "o " + t.name + "\n", t.material && t.material.name && (l += "usemtl " + t.material.name + "\n"), void 0 !== e) + for (n = 0, s = e.count; n < s; n++, y++) d.x = e.getX(n), d.y = e.getY(n), d.z = e.getZ(n), d.applyMatrix4(t.matrixWorld), l += "v " + d.x + " " + d.y + " " + d.z + "\n"; + if (void 0 !== a) + for (n = 0, s = a.count; n < s; n++, b++) m.x = a.getX(n), m.y = a.getY(n), l += "vt " + m.x + " " + m.y + "\n"; + if (void 0 !== i) + for (w.getNormalMatrix(t.matrixWorld), n = 0, s = i.count; n < s; n++, x++) f.x = i.getX(n), f.y = i.getY(n), f.z = i.getZ(n), f.applyMatrix3(w), l += "vn " + f.x + " " + f.y + " " + f.z + "\n"; + if (null !== v) + for (n = 0, s = v.count; n < s; n += 3) { + for (c = 0; c < 3; c++) o = v.getX(n + c) + 1, g[c] = u + o + (i || a ? "/" + (a ? h + o : "") + (i ? "/" + (p + o) : "") : ""); + l += "f " + g.join(" ") + "\n" + } else + for (n = 0, s = e.count; n < s; n += 3) { + for (c = 0; c < 3; c++) o = n + c + 1, g[c] = u + o + (i || a ? "/" + (a ? h + o : "") + (i ? "/" + (p + o) : "") : ""); + l += "f " + g.join(" ") + "\n" + } + } + u += y, h += b, p += x + }(t), t instanceof Ke && function(t) { + var e, i = 0, + r = t.geometry, + c = t.type; + if (r.isGeometry && (r = (new k).setFromObject(t)), r.isBufferGeometry) { + if (e = r.getAttribute("position"), l += "o " + t.name + "\n", void 0 !== e) + for (n = 0, s = e.count; n < s; n++, i++) d.x = e.getX(n), d.y = e.getY(n), d.z = e.getZ(n), d.applyMatrix4(t.matrixWorld), l += "v " + d.x + " " + d.y + " " + d.z + "\n"; + if ("Line" === c) { + for (l += "l ", o = 1, s = e.count; o <= s; o++) l += u + o + " "; + l += "\n" + } + if ("LineSegments" === c) + for (a = 1 + (o = 1), s = e.count; o < s; a = (o += 2) + 1) l += "l " + (u + o) + " " + (u + a) + "\n" + } + u += i + }(t) + }), l + } + }, (np = function(t) { + this.subdivisions = void 0 === t ? 1 : t + }).prototype.modify = function(t) { + (t = t.isBufferGeometry ? (new V).fromBufferGeometry(t) : t.clone()).mergeVertices(); + for (var e = this.subdivisions; e-- > 0;) this.smooth(t); + return t.computeFaceNormals(), t.computeVertexNormals(), t + }, + function() { + function t(t, e, n) { + return n[Math.min(t, e) + "_" + Math.max(t, e)] + } + + function n(t, e, n, i, r, o) { + var a, s = Math.min(t, e), + c = Math.max(t, e), + l = s + "_" + c; + l in i ? a = i[l] : (a = { + a: n[s], + b: n[c], + newEdge: null, + faces: [] + }, i[l] = a), a.faces.push(r), o[t].edges.push(a), o[e].edges.push(a) + } + + function r(t, e, n, i, r) { + t.push(new M(e, n, i, void 0, void 0, r)) + } + + function o(t, e) { + return Math.abs(e - t) / 2 + Math.min(t, e) + } + + function a(t, e, n, i) { + t.push([e.clone(), n.clone(), i.clone()]) + } + var s = ["a", "b", "c"]; + np.prototype.smooth = function(c) { + var l, u, h, p, d, f, m, g, v, y, x, b, _, w, M, S, T, A, L, C, P, E, N, O, D, I, z, R, F, k, B, U, j, V, G = new i, + W = [], + H = c.vertices, + q = c.faces, + X = c.faceVertexUvs[0], + Y = void 0 !== X && X.length > 0, + Z = Array(H.length), + J = {}; + for (p in function(t, e, i, r) { + var o, a, s; + for (o = 0, a = t.length; o < a; o++) i[o] = { + edges: [] + }; + for (o = 0, a = e.length; o < a; o++) n((s = e[o]).a, s.b, t, r, s, i), n(s.b, s.c, t, r, s, i), n(s.c, s.a, t, r, s, i) + }(H, q, Z, J), g = [], J) { + for (x = J[p], b = new i, w = 3 / 8, M = 1 / 8, 2 != (S = x.faces.length) && (w = .5, M = 0), b.addVectors(x.a, x.b).multiplyScalar(w), G.set(0, 0, 0), f = 0; f < S; f++) { + for (_ = x.faces[f], m = 0; m < 3 && ((y = H[_[s[m]]]) === x.a || y === x.b); m++); + G.add(y) + } + G.multiplyScalar(M), b.add(G), x.newEdge = g.length, g.push(b) + } + for (v = [], p = 0, d = H.length; p < d; p++) { + for (E = H[p], 3 == (h = (P = Z[p].edges).length) ? T = 3 / 16 : h > 3 && (T = 3 / (8 * h)), A = 1 - h * T, L = T, h <= 2 && 2 == h && (A = .75, L = 1 / 8), N = E.clone().multiplyScalar(A), G.set(0, 0, 0), f = 0; f < h; f++) y = (C = P[f]).a !== E ? C.a : C.b, G.add(y); + G.multiplyScalar(L), N.add(G), v.push(N) + } + for (l = v.concat(g), O = v.length, u = [], U = new e, j = new e, V = new e, p = 0, d = q.length; p < d; p++) r(u, D = t((_ = q[p]).a, _.b, J).newEdge + O, I = t(_.b, _.c, J).newEdge + O, z = t(_.c, _.a, J).newEdge + O, _.materialIndex), r(u, _.a, D, z, _.materialIndex), r(u, _.b, I, D, _.materialIndex), r(u, _.c, z, I, _.materialIndex), Y && (F = (R = X[p])[0], k = R[1], B = R[2], U.set(o(F.x, k.x), o(F.y, k.y)), j.set(o(k.x, B.x), o(k.y, B.y)), V.set(o(F.x, B.x), o(F.y, B.y)), a(W, U, j, V), a(W, F, U, V), a(W, k, j, U), a(W, B, V, j)); + c.vertices = l, c.faces = u, Y && (c.faceVertexUvs[0] = W) + } + }(), ip = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {}, rp = Lo(function(t) { + ! function() { + function e(t, e, n) { + var i = new XMLHttpRequest; + i.open("GET", t), i.responseType = "blob", i.onload = function() { + o(i.response, e, n) + }, i.onerror = function() {}, i.send() + } + + function n(t) { + var e = new XMLHttpRequest; + e.open("HEAD", t, 0); + try { + e.send() + } catch (t) {} + return 200 <= e.status && 299 >= e.status + } + + function i(t) { + try { + t.dispatchEvent(new MouseEvent("click")) + } catch (n) { + var e = document.createEvent("MouseEvents"); + e.initMouseEvent("click", 1, 1, window, 0, 0, 0, 80, 20, 0, 0, 0, 0, 0, null), t.dispatchEvent(e) + } + } + var r = "object" == typeof window && window.window === window ? window : "object" == typeof self && self.self === self ? self : "object" == typeof ip && ip.global === ip ? ip : void 0, + o = r.saveAs || ("object" != typeof window || window !== r ? function() {} : "download" in HTMLAnchorElement.prototype ? function(t, o, a) { + var s = r.URL || r.webkitURL, + c = document.createElement("a"); + o = o || t.name || "download", c.download = o, c.rel = "noopener", "string" == typeof t ? (c.href = t, c.origin === location.origin ? i(c) : n(c.href) ? e(t, o, a) : i(c, c.target = "_blank")) : (c.href = s.createObjectURL(t), setTimeout(function() { + s.revokeObjectURL(c.href) + }, 4e4), setTimeout(function() { + i(c) + }, 0)) + } : "msSaveOrOpenBlob" in navigator ? function(t, r, o) { + if (r = r || t.name || "download", "string" != typeof t) navigator.msSaveOrOpenBlob(function(t, e) { + return void 0 === e ? e = { + autoBom: 0 + } : "object" != typeof e && (e = { + autoBom: !e + }), e.autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type) ? new Blob(["\ufeff", t], { + type: t.type + }) : t + }(t, o), r); + else if (n(t)) e(t, r, o); + else { + var a = document.createElement("a"); + a.href = t, a.target = "_blank", setTimeout(function() { + i(a) + }) + } + } : function(t, n, i, o) { + var a, s, c, l, u, h; + if ((o = o || open("", "_blank")) && (o.document.title = o.document.body.innerText = "downloading..."), "string" == typeof t) return e(t, n, i); + a = "application/octet-stream" === t.type, s = /constructor/i.test(r.HTMLElement) || r.safari, ((c = /CriOS\/[\d]+/.test(navigator.userAgent)) || a && s) && "object" == typeof FileReader ? ((l = new FileReader).onloadend = function() { + var t = l.result; + t = c ? t : t.replace(/^data:[^;]*;/, "data:attachment/file;"), o ? o.location.href = t : location = t, o = null + }, l.readAsDataURL(t)) : (u = r.URL || r.webkitURL, h = u.createObjectURL(t), o ? o.location = h : location.href = h, o = null, setTimeout(function() { + u.revokeObjectURL(h) + }, 4e4)) + }); + r.saveAs = o.saveAs = o, t.exports = o + }() + }), op = rp.saveAs, ap = Lo(function(t) { + ! function(e, n) { + t.exports = e.document ? n(e, 1) : function(t) { + if (!t.document) throw Error("jQuery requires a window with a document"); + return n(t) + } + }("undefined" != typeof window ? window : ip, function(t, e) { + function n(t, e, n) { + var i, r, o = (n = n || Ie).createElement("script"); + if (o.text = t, e) + for (i in Ye)(r = e[i] || e.getAttribute && e.getAttribute(i)) && o.setAttribute(i, r); + n.head.appendChild(o).parentNode.removeChild(o) + } + + function i(t) { + return null == t ? t + "" : "object" == typeof t || "function" == typeof t ? Ue[je.call(t)] || "object" : typeof t + } + + function r(t) { + var e = !!t && "length" in t && t.length, + n = i(t); + return qe(t) || Xe(t) ? 0 : "array" === n || 0 === e || "number" == typeof e && e > 0 && e - 1 in t + } + + function o(t, e) { + return t.nodeName && t.nodeName.toLowerCase() === e.toLowerCase() + } + + function a(t, e, n) { + return qe(e) ? Ze.grep(t, function(t, i) { + return !!e.call(t, i, t) !== n + }) : e.nodeType ? Ze.grep(t, function(t) { + return t === e !== n + }) : "string" != typeof e ? Ze.grep(t, function(t) { + return Be.call(e, t) > -1 !== n + }) : Ze.filter(e, t, n) + } + + function s(t, e) { + for (; + (t = t[e]) && 1 !== t.nodeType;); + return t + } + + function c(t) { + return t + } + + function l(t) { + throw t + } + + function u(t, e, n, i) { + var r; + try { + t && qe(r = t.promise) ? r.call(t).done(e).fail(n) : t && qe(r = t.then) ? r.call(t, e, n) : e.apply(void 0, [t].slice(i)) + } catch (t) { + n.call(void 0, t) + } + } + + function h() { + Ie.removeEventListener("DOMContentLoaded", h), t.removeEventListener("load", h), Ze.ready() + } + + function p(t, e) { + return e.toUpperCase() + } + + function d(t) { + return t.replace(pt, "ms-").replace(dt, p) + } + + function f() { + this.expando = Ze.expando + f.uid++ + } + + function m(t, e, n) { + var i; + if (void 0 === n && 1 === t.nodeType) + if (i = "data-" + e.replace(yt, "-$&").toLowerCase(), "string" == typeof(n = t.getAttribute(i))) { + try { + n = function(t) { + return "true" === t ? 1 : "false" === t ? 0 : "null" === t ? null : t === +t + "" ? +t : vt.test(t) ? JSON.parse(t) : t + }(n) + } catch (t) {} + gt.set(t, e, n) + } else n = void 0; + return n + } + + function g(t, e, n, i) { + var r, o, a = 20, + s = i ? function() { + return i.cur() + } : function() { + return Ze.css(t, e, "") + }, + c = s(), + l = n && n[3] || (Ze.cssNumber[e] ? "" : "px"), + u = t.nodeType && (Ze.cssNumber[e] || "px" !== l && +c) && bt.exec(Ze.css(t, e)); + if (u && u[3] !== l) { + for (c /= 2, l = l || u[3], u = +c || 1; a--;) Ze.style(t, e, u + l), (1 - o) * (1 - (o = s() / c || .5)) <= 0 && (a = 0), u /= o; + u *= 2, Ze.style(t, e, u + l), n = n || [] + } + return n && (u = +u || +c || 0, r = n[1] ? u + (n[1] + 1) * n[2] : +n[2], i && (i.unit = l, i.start = u, i.end = r)), r + } + + function v(t) { + var e, n = t.ownerDocument, + i = t.nodeName, + r = Lt[i]; + return r || (e = n.body.appendChild(n.createElement(i)), r = Ze.css(e, "display"), e.parentNode.removeChild(e), "none" === r && (r = "block"), Lt[i] = r, r) + } + + function y(t, e) { + for (var n, i, r = [], o = 0, a = t.length; o < a; o++)(i = t[o]).style && (n = i.style.display, e ? ("none" === n && (r[o] = mt.get(i, "display") || null, r[o] || (i.style.display = "")), "" === i.style.display && Tt(i) && (r[o] = v(i))) : "none" !== n && (r[o] = "none", mt.set(i, "display", n))); + for (o = 0; o < a; o++) null != r[o] && (t[o].style.display = r[o]); + return t + } + + function x(t, e) { + var n; + return n = void 0 !== t.getElementsByTagName ? t.getElementsByTagName(e || "*") : void 0 !== t.querySelectorAll ? t.querySelectorAll(e || "*") : [], void 0 === e || e && o(t, e) ? Ze.merge([t], n) : n + } + + function b(t, e) { + for (var n = 0, i = t.length; n < i; n++) mt.set(t[n], "globalEval", !e || mt.get(e[n], "globalEval")) + } + + function _(t, e, n, r, o) { + for (var a, s, c, l, u, h, p = e.createDocumentFragment(), d = [], f = 0, m = t.length; f < m; f++) + if ((a = t[f]) || 0 === a) + if ("object" === i(a)) Ze.merge(d, a.nodeType ? [a] : a); + else if (Ot.test(a)) { + for (s = s || p.appendChild(e.createElement("div")), c = (Pt.exec(a) || ["", ""])[1].toLowerCase(), l = Nt[c] || Nt._default, s.innerHTML = l[1] + Ze.htmlPrefilter(a) + l[2], h = l[0]; h--;) s = s.lastChild; + Ze.merge(d, s.childNodes), (s = p.firstChild).textContent = "" + } else d.push(e.createTextNode(a)); + for (p.textContent = "", f = 0; a = d[f++];) + if (r && Ze.inArray(a, r) > -1) o && o.push(a); + else if (u = Mt(a), s = x(p.appendChild(a), "script"), u && b(s), n) + for (h = 0; a = s[h++];) Et.test(a.type || "") && n.push(a); + return p + } + + function w() { + return 1 + } + + function M() { + return 0 + } + + function S(t, e) { + return t === function() { + try { + return Ie.activeElement + } catch (t) {} + }() == ("focus" === e) + } + + function T(t, e, n, i, r, o) { + var a, s; + if ("object" == typeof e) { + for (s in "string" != typeof n && (i = i || n, n = void 0), e) T(t, s, n, i, e[s], o); + return t + } + if (null == i && null == r ? (r = n, i = n = void 0) : null == r && ("string" == typeof n ? (r = i, i = void 0) : (r = i, i = n, n = void 0)), 0 == r) r = M; + else if (!r) return t; + return 1 === o && (a = r, (r = function(t) { + return Ze().off(t), a.apply(this, arguments) + }).guid = a.guid || (a.guid = Ze.guid++)), t.each(function() { + Ze.event.add(this, e, r, i, n) + }) + } + + function A(t, e, n) { + n ? (mt.set(t, e, 0), Ze.event.add(t, e, { + namespace: 0, + handler: function(t) { + var i, r, o = mt.get(this, e); + if (1 & t.isTrigger && this[e]) { + if (o.length)(Ze.event.special[e] || {}).delegateType && t.stopPropagation(); + else if (o = Re.call(arguments), mt.set(this, e, o), i = n(this, e), this[e](), o !== (r = mt.get(this, e)) || i ? mt.set(this, e, 0) : r = {}, o !== r) return t.stopImmediatePropagation(), t.preventDefault(), r.value + } else o.length && (mt.set(this, e, { + value: Ze.event.trigger(Ze.extend(o[0], Ze.Event.prototype), o.slice(1), this) + }), t.stopImmediatePropagation()) + } + })) : void 0 === mt.get(t, e) && Ze.event.add(t, e, w) + } + + function L(t, e) { + return o(t, "table") && o(11 !== e.nodeType ? e : e.firstChild, "tr") && Ze(t).children("tbody")[0] || t + } + + function C(t) { + return t.type = (null !== t.getAttribute("type")) + "/" + t.type, t + } + + function P(t) { + return "true/" === (t.type || "").slice(0, 5) ? t.type = t.type.slice(5) : t.removeAttribute("type"), t + } + + function E(t, e) { + var n, i, r, o, a, s, c, l; + if (1 === e.nodeType) { + if (mt.hasData(t) && (o = mt.access(t), a = mt.set(e, o), l = o.events)) + for (r in delete a.handle, a.events = {}, l) + for (n = 0, i = l[r].length; n < i; n++) Ze.event.add(e, r, l[r][n]); + gt.hasData(t) && (s = gt.access(t), c = Ze.extend({}, s), gt.set(e, c)) + } + } + + function N(t, e) { + var n = e.nodeName.toLowerCase(); + "input" === n && Ct.test(t.type) ? e.checked = t.checked : "input" !== n && "textarea" !== n || (e.defaultValue = t.defaultValue) + } + + function O(t, e, i, r) { + e = Fe.apply([], e); + var o, a, s, c, l, u, h = 0, + p = t.length, + d = p - 1, + f = e[0], + m = qe(f); + if (m || p > 1 && "string" == typeof f && !He.checkClone && kt.test(f)) return t.each(function(n) { + var o = t.eq(n); + m && (e[0] = f.call(this, n, o.html())), O(o, e, i, r) + }); + if (p && (a = (o = _(e, t[0].ownerDocument, 0, t, r)).firstChild, 1 === o.childNodes.length && (o = a), a || r)) { + for (c = (s = Ze.map(x(o, "script"), C)).length; h < p; h++) l = o, h !== d && (l = Ze.clone(l, 1, 1), c && Ze.merge(s, x(l, "script"))), i.call(t[h], l, h); + if (c) + for (u = s[s.length - 1].ownerDocument, Ze.map(s, P), h = 0; h < c; h++) l = s[h], Et.test(l.type || "") && !mt.access(l, "globalEval") && Ze.contains(u, l) && (l.src && "module" !== (l.type || "").toLowerCase() ? Ze._evalUrl && !l.noModule && Ze._evalUrl(l.src, { + nonce: l.nonce || l.getAttribute("nonce") + }) : n(l.textContent.replace(Bt, ""), l, u)) + } + return t + } + + function D(t, e, n) { + for (var i, r = e ? Ze.filter(e, t) : t, o = 0; null != (i = r[o]); o++) n || 1 !== i.nodeType || Ze.cleanData(x(i)), i.parentNode && (n && Mt(i) && b(x(i, "script")), i.parentNode.removeChild(i)); + return t + } + + function I(t, e, n) { + var i, r, o, a, s = t.style; + return (n = n || jt(t)) && ("" !== (a = n.getPropertyValue(e) || n[e]) || Mt(t) || (a = Ze.style(t, e)), !He.pixelBoxStyles() && Ut.test(a) && Vt.test(e) && (i = s.width, r = s.minWidth, o = s.maxWidth, s.minWidth = s.maxWidth = s.width = a, a = n.width, s.width = i, s.minWidth = r, s.maxWidth = o)), void 0 !== a ? a + "" : a + } + + function z(t, e) { + return { + get: function() { + if (!t()) return (this.get = e).apply(this, arguments); + delete this.get + } + } + } + + function R(t) { + return Ze.cssProps[t] || Ht[t] || (t in Wt ? t : Ht[t] = function(t) { + for (var e = t[0].toUpperCase() + t.slice(1), n = Gt.length; n--;) + if ((t = Gt[n] + e) in Wt) return t + }(t) || t) + } + + function F(t, e, n) { + var i = bt.exec(e); + return i ? Math.max(0, i[2] - (n || 0)) + (i[3] || "px") : e + } + + function k(t, e, n, i, r, o) { + var a = "width" === e ? 1 : 0, + s = 0, + c = 0; + if (n === (i ? "border" : "content")) return 0; + for (; a < 4; a += 2) "margin" === n && (c += Ze.css(t, n + _t[a], 1, r)), i ? ("content" === n && (c -= Ze.css(t, "padding" + _t[a], 1, r)), "margin" !== n && (c -= Ze.css(t, "border" + _t[a] + "Width", 1, r))) : (c += Ze.css(t, "padding" + _t[a], 1, r), "padding" !== n ? c += Ze.css(t, "border" + _t[a] + "Width", 1, r) : s += Ze.css(t, "border" + _t[a] + "Width", 1, r)); + return !i && o >= 0 && (c += Math.max(0, Math.ceil(t["offset" + e[0].toUpperCase() + e.slice(1)] - o - c - s - .5)) || 0), c + } + + function B(t, e, n) { + var i = jt(t), + r = (!He.boxSizingReliable() || n) && "border-box" === Ze.css(t, "boxSizing", 0, i), + o = r, + a = I(t, e, i), + s = "offset" + e[0].toUpperCase() + e.slice(1); + if (Ut.test(a)) { + if (!n) return a; + a = "auto" + } + return (!He.boxSizingReliable() && r || "auto" === a || !parseFloat(a) && "inline" === Ze.css(t, "display", 0, i)) && t.getClientRects().length && (r = "border-box" === Ze.css(t, "boxSizing", 0, i), (o = s in t) && (a = t[s])), (a = parseFloat(a) || 0) + k(t, e, n || (r ? "border" : "content"), o, i, a) + "px" + } + + function U(t, e, n, i, r) { + return new U.prototype.init(t, e, n, i, r) + } + + function j() { + $t && (0 == Ie.hidden && t.requestAnimationFrame ? t.requestAnimationFrame(j) : t.setTimeout(j, Ze.fx.interval), Ze.fx.tick()) + } + + function V() { + return t.setTimeout(function() { + Jt = void 0 + }), Jt = Date.now() + } + + function G(t, e) { + var n, i = 0, + r = { + height: t + }; + for (e = e ? 1 : 0; i < 4; i += 2 - e) r["margin" + (n = _t[i])] = r["padding" + n] = t; + return e && (r.opacity = r.width = t), r + } + + function W(t, e, n) { + for (var i, r = (H.tweeners[e] || []).concat(H.tweeners["*"]), o = 0, a = r.length; o < a; o++) + if (i = r[o].call(n, e, t)) return i + } + + function H(t, e, n) { + var i, r, o = 0, + a = H.prefilters.length, + s = Ze.Deferred().always(function() { + delete c.elem + }), + c = function() { + if (r) return 0; + for (var e = Jt || V(), n = Math.max(0, l.startTime + l.duration - e), i = 1 - (n / l.duration || 0), o = 0, a = l.tweens.length; o < a; o++) l.tweens[o].run(i); + return s.notifyWith(t, [l, i, n]), i < 1 && a ? n : (a || s.notifyWith(t, [l, 1, 0]), s.resolveWith(t, [l]), 0) + }, + l = s.promise({ + elem: t, + props: Ze.extend({}, e), + opts: Ze.extend(1, { + specialEasing: {}, + easing: Ze.easing._default + }, n), + originalProperties: e, + originalOptions: n, + startTime: Jt || V(), + duration: n.duration, + tweens: [], + createTween: function(e, n) { + var i = Ze.Tween(t, l.opts, e, n, l.opts.specialEasing[e] || l.opts.easing); + return l.tweens.push(i), i + }, + stop: function(e) { + var n = 0, + i = e ? l.tweens.length : 0; + if (r) return this; + for (r = 1; n < i; n++) l.tweens[n].run(1); + return e ? (s.notifyWith(t, [l, 1, 0]), s.resolveWith(t, [l, e])) : s.rejectWith(t, [l, e]), this + } + }), + u = l.props; + for (function(t, e) { + var n, i, r, o, a; + for (n in t) + if (r = e[i = d(n)], o = t[n], Array.isArray(o) && (r = o[1], o = t[n] = o[0]), n !== i && (t[i] = o, delete t[n]), (a = Ze.cssHooks[i]) && "expand" in a) + for (n in o = a.expand(o), delete t[i], o) n in t || (t[n] = o[n], e[n] = r); + else e[i] = r + }(u, l.opts.specialEasing); o < a; o++) + if (i = H.prefilters[o].call(l, t, u, l.opts)) return qe(i.stop) && (Ze._queueHooks(l.elem, l.opts.queue).stop = i.stop.bind(i)), i; + return Ze.map(u, W, l), qe(l.opts.start) && l.opts.start.call(t, l), l.progress(l.opts.progress).done(l.opts.done, l.opts.complete).fail(l.opts.fail).always(l.opts.always), Ze.fx.timer(Ze.extend(c, { + elem: t, + anim: l, + queue: l.opts.queue + })), l + } + + function q(t) { + return (t.match(ct) || []).join(" ") + } + + function X(t) { + return t.getAttribute && t.getAttribute("class") || "" + } + + function Y(t) { + return Array.isArray(t) ? t : "string" == typeof t && t.match(ct) || [] + } + + function Z(t, e, n, r) { + var o; + if (Array.isArray(e)) Ze.each(e, function(e, i) { + n || ue.test(t) ? r(t, i) : Z(t + "[" + ("object" == typeof i && null != i ? e : "") + "]", i, n, r) + }); + else if (n || "object" !== i(e)) r(t, e); + else + for (o in e) Z(t + "[" + o + "]", e[o], n, r) + } + + function J(t) { + return function(e, n) { + "string" != typeof e && (n = e, e = "*"); + var i, r = 0, + o = e.toLowerCase().match(ct) || []; + if (qe(n)) + for (; i = o[r++];) "+" === i[0] ? (i = i.slice(1) || "*", (t[i] = t[i] || []).unshift(n)) : (t[i] = t[i] || []).push(n) + } + } + + function $(t, e, n, i) { + function r(s) { + var c; + return o[s] = 1, Ze.each(t[s] || [], function(t, s) { + var l = s(e, n, i); + return "string" != typeof l || a || o[l] ? a ? !(c = l) : void 0 : (e.dataTypes.unshift(l), r(l), 0) + }), c + } + var o = {}, + a = t === we; + return r(e.dataTypes[0]) || !o["*"] && r("*") + } + + function Q(t, e) { + var n, i, r = Ze.ajaxSettings.flatOptions || {}; + for (n in e) void 0 !== e[n] && ((r[n] ? t : i || (i = {}))[n] = e[n]); + return i && Ze.extend(1, t, i), t + } + var K, tt, et, nt, it, rt, ot, at, st, ct, lt, ut, ht, pt, dt, ft, mt, gt, vt, yt, xt, bt, _t, wt, Mt, St, Tt, At, Lt, Ct, Pt, Et, Nt, Ot, Dt, It, zt, Rt, Ft, kt, Bt, Ut, jt, Vt, Gt, Wt, Ht, qt, Xt, Yt, Zt, Jt, $t, Qt, Kt, te, ee, ne, ie, re, oe, ae, se, ce, le, ue, he, pe, de, fe, me, ge, ve, ye, xe, be, _e, we, Me, Se, Te, Ae, Le, Ce, Pe, Ee, Ne, Oe, De = [], + Ie = t.document, + ze = Object.getPrototypeOf, + Re = De.slice, + Fe = De.concat, + ke = De.push, + Be = De.indexOf, + Ue = {}, + je = Ue.toString, + Ve = Ue.hasOwnProperty, + Ge = Ve.toString, + We = Ge.call(Object), + He = {}, + qe = function(t) { + return "function" == typeof t && "number" != typeof t.nodeType + }, + Xe = function(t) { + return null != t && t === t.window + }, + Ye = { + type: 1, + src: 1, + nonce: 1, + noModule: 1 + }, + Ze = function(t, e) { + return new Ze.fn.init(t, e) + }, + Je = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + return Ze.fn = Ze.prototype = { + jquery: "3.4.1", + constructor: Ze, + length: 0, + toArray: function() { + return Re.call(this) + }, + get: function(t) { + return null == t ? Re.call(this) : t < 0 ? this[t + this.length] : this[t] + }, + pushStack: function(t) { + var e = Ze.merge(this.constructor(), t); + return e.prevObject = this, e + }, + each: function(t) { + return Ze.each(this, t) + }, + map: function(t) { + return this.pushStack(Ze.map(this, function(e, n) { + return t.call(e, n, e) + })) + }, + slice: function() { + return this.pushStack(Re.apply(this, arguments)) + }, + first: function() { + return this.eq(0) + }, + last: function() { + return this.eq(-1) + }, + eq: function(t) { + var e = this.length, + n = +t + (t < 0 ? e : 0); + return this.pushStack(n >= 0 && n < e ? [this[n]] : []) + }, + end: function() { + return this.prevObject || this.constructor() + }, + push: ke, + sort: De.sort, + splice: De.splice + }, Ze.extend = Ze.fn.extend = function(t) { + var e, n, i, r, o, a, s = t || {}, + c = 1, + l = arguments.length, + u = 0; + for ("boolean" == typeof s && (u = s, s = arguments[c] || {}, c++), "object" == typeof s || qe(s) || (s = {}), c === l && (s = this, c--); c < l; c++) + if (null != (e = arguments[c])) + for (n in e) r = e[n], "__proto__" !== n && s !== r && (u && r && (Ze.isPlainObject(r) || (o = Array.isArray(r))) ? (i = s[n], a = o && !Array.isArray(i) ? [] : o || Ze.isPlainObject(i) ? i : {}, o = 0, s[n] = Ze.extend(u, a, r)) : void 0 !== r && (s[n] = r)); + return s + }, Ze.extend({ + expando: "jQuery" + ("3.4.1" + Math.random()).replace(/\D/g, ""), + isReady: 1, + error: function(t) { + throw Error(t) + }, + noop: function() {}, + isPlainObject: function(t) { + var e, n; + return t && "[object Object]" === je.call(t) ? (e = ze(t)) ? "function" == typeof(n = Ve.call(e, "constructor") && e.constructor) && Ge.call(n) === We : 1 : 0 + }, + isEmptyObject: function(t) { + var e; + for (e in t) return 0; + return 1 + }, + globalEval: function(t, e) { + n(t, { + nonce: e && e.nonce + }) + }, + each: function(t, e) { + var n, i = 0; + if (r(t)) + for (n = t.length; i < n && 0 != e.call(t[i], i, t[i]); i++); + else + for (i in t) + if (0 == e.call(t[i], i, t[i])) break; return t + }, + trim: function(t) { + return null == t ? "" : (t + "").replace(Je, "") + }, + makeArray: function(t, e) { + var n = e || []; + return null != t && (r(Object(t)) ? Ze.merge(n, "string" == typeof t ? [t] : t) : ke.call(n, t)), n + }, + inArray: function(t, e, n) { + return null == e ? -1 : Be.call(e, t, n) + }, + merge: function(t, e) { + for (var n = +e.length, i = 0, r = t.length; i < n; i++) t[r++] = e[i]; + return t.length = r, t + }, + grep: function(t, e, n) { + for (var i = [], r = 0, o = t.length, a = !n; r < o; r++) !e(t[r], r) !== a && i.push(t[r]); + return i + }, + map: function(t, e, n) { + var i, o, a = 0, + s = []; + if (r(t)) + for (i = t.length; a < i; a++) null != (o = e(t[a], a, n)) && s.push(o); + else + for (a in t) null != (o = e(t[a], a, n)) && s.push(o); + return Fe.apply([], s) + }, + guid: 1, + support: He + }), "function" == typeof Symbol && (Ze.fn[Symbol.iterator] = De[Symbol.iterator]), Ze.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function(t, e) { + Ue["[object " + e + "]"] = e.toLowerCase() + }), K = function(t) { + function e(t, e, n, i) { + var r, o, a, s, c, l, u, p = e && e.ownerDocument, + f = e ? e.nodeType : 9; + if (n = n || [], "string" != typeof t || !t || 1 !== f && 9 !== f && 11 !== f) return n; + if (!i && ((e ? e.ownerDocument || e : B) !== N && E(e), e = e || N, D)) { + if (11 !== f && (c = vt.exec(t))) + if (r = c[1]) { + if (9 === f) { + if (!(a = e.getElementById(r))) return n; + if (a.id === r) return n.push(a), n + } else if (p && (a = p.getElementById(r)) && F(e, a) && a.id === r) return n.push(a), n + } else { + if (c[2]) return $.apply(n, e.getElementsByTagName(t)), n; + if ((r = c[3]) && b.getElementsByClassName && e.getElementsByClassName) return $.apply(n, e.getElementsByClassName(r)), n + } + if (b.qsa && !H[t + " "] && (!I || !I.test(t)) && (1 !== f || "object" !== e.nodeName.toLowerCase())) { + if (u = t, p = e, 1 === f && lt.test(t)) { + for ((s = e.getAttribute("id")) ? s = s.replace(_t, wt) : e.setAttribute("id", s = k), o = (l = S(t)).length; o--;) l[o] = "#" + s + " " + d(l[o]); + u = l.join(","), p = yt.test(t) && h(e.parentNode) || e + } + try { + return $.apply(n, p.querySelectorAll(u)), n + } catch (e) { + H(t, 1) + } finally { + s === k && e.removeAttribute("id") + } + } + } + return A(t.replace(at, "$1"), e, n, i) + } + + function n() { + var t = []; + return function e(n, i) { + return t.push(n + " ") > _.cacheLength && delete e[t.shift()], e[n + " "] = i + } + } + + function i(t) { + return t[k] = 1, t + } + + function r(t) { + var e = N.createElement("fieldset"); + try { + return !!t(e) + } catch (t) { + return 0 + } finally { + e.parentNode && e.parentNode.removeChild(e), e = null + } + } + + function o(t, e) { + for (var n = t.split("|"), i = n.length; i--;) _.attrHandle[n[i]] = e + } + + function a(t, e) { + var n = e && t, + i = n && 1 === t.nodeType && 1 === e.nodeType && t.sourceIndex - e.sourceIndex; + if (i) return i; + if (n) + for (; n = n.nextSibling;) + if (n === e) return -1; + return t ? 1 : -1 + } + + function s(t) { + return function(e) { + return "input" === e.nodeName.toLowerCase() && e.type === t + } + } + + function c(t) { + return function(e) { + var n = e.nodeName.toLowerCase(); + return ("input" === n || "button" === n) && e.type === t + } + } + + function l(t) { + return function(e) { + return "form" in e ? e.parentNode && 0 == e.disabled ? "label" in e ? "label" in e.parentNode ? e.parentNode.disabled === t : e.disabled === t : e.isDisabled === t || e.isDisabled !== !t && St(e) === t : e.disabled === t : "label" in e ? e.disabled === t : 0 + } + } + + function u(t) { + return i(function(e) { + return e = +e, i(function(n, i) { + for (var r, o = t([], n.length, e), a = o.length; a--;) n[r = o[a]] && (n[r] = !(i[r] = n[r])) + }) + }) + } + + function h(t) { + return t && void 0 !== t.getElementsByTagName && t + } + + function p() {} + + function d(t) { + for (var e = 0, n = t.length, i = ""; e < n; e++) i += t[e].value; + return i + } + + function f(t, e, n) { + var i = e.dir, + r = e.next, + o = r || i, + a = n && "parentNode" === o, + s = j++; + return e.first ? function(e, n, r) { + for (; e = e[i];) + if (1 === e.nodeType || a) return t(e, n, r); + return 0 + } : function(e, n, c) { + var l, u, h, p = [U, s]; + if (c) { + for (; e = e[i];) + if ((1 === e.nodeType || a) && t(e, n, c)) return 1 + } else + for (; e = e[i];) + if (1 === e.nodeType || a) + if (u = (h = e[k] || (e[k] = {}))[e.uniqueID] || (h[e.uniqueID] = {}), r && r === e.nodeName.toLowerCase()) e = e[i] || e; + else { + if ((l = u[o]) && l[0] === U && l[1] === s) return p[2] = l[2]; + if (u[o] = p, p[2] = t(e, n, c)) return 1 + } return 0 + } + } + + function m(t) { + return t.length > 1 ? function(e, n, i) { + for (var r = t.length; r--;) + if (!t[r](e, n, i)) return 0; + return 1 + } : t[0] + } + + function g(t, e, n, i, r) { + for (var o, a = [], s = 0, c = t.length, l = null != e; s < c; s++)(o = t[s]) && (n && !n(o, i, r) || (a.push(o), l && e.push(s))); + return a + } + + function v(t, n, r, o, a, s) { + return o && !o[k] && (o = v(o)), a && !a[k] && (a = v(a, s)), i(function(i, s, c, l) { + var u, h, p, d = [], + f = [], + m = s.length, + v = i || function(t, n, i) { + for (var r = 0, o = n.length; r < o; r++) e(t, n[r], i); + return i + }(n || "*", c.nodeType ? [c] : c, []), + y = !t || !i && n ? v : g(v, d, t, c, l), + x = r ? a || (i ? t : m || o) ? [] : s : y; + if (r && r(y, x, c, l), o) + for (u = g(x, f), o(u, [], c, l), h = u.length; h--;)(p = u[h]) && (x[f[h]] = !(y[f[h]] = p)); + if (i) { + if (a || t) { + if (a) { + for (u = [], h = x.length; h--;)(p = x[h]) && u.push(y[h] = p); + a(null, x = [], u, l) + } + for (h = x.length; h--;)(p = x[h]) && (u = a ? K(i, p) : d[h]) > -1 && (i[u] = !(s[u] = p)) + } + } else x = g(x === s ? x.splice(m, x.length) : x), a ? a(null, s, x, l) : $.apply(s, x) + }) + } + + function y(t) { + for (var e, n, i, r = t.length, o = _.relative[t[0].type], a = o || _.relative[" "], s = o ? 1 : 0, c = f(function(t) { + return t === e + }, a, 1), l = f(function(t) { + return K(e, t) > -1 + }, a, 1), u = [function(t, n, i) { + var r = !o && (i || n !== L) || ((e = n).nodeType ? c(t, n, i) : l(t, n, i)); + return e = null, r + }]; s < r; s++) + if (n = _.relative[t[s].type]) u = [f(m(u), n)]; + else { + if ((n = _.filter[t[s].type].apply(null, t[s].matches))[k]) { + for (i = ++s; i < r && !_.relative[t[i].type]; i++); + return v(s > 1 && m(u), s > 1 && d(t.slice(0, s - 1).concat({ + value: " " === t[s - 2].type ? "*" : "" + })).replace(at, "$1"), n, s < i && y(t.slice(s, i)), i < r && y(t = t.slice(i)), i < r && d(t)) + } + u.push(n) + } + return m(u) + } + var x, b, _, w, M, S, T, A, L, C, P, E, N, O, D, I, z, R, F, k = "sizzle" + 1 * new Date, + B = t.document, + U = 0, + j = 0, + V = n(), + G = n(), + W = n(), + H = n(), + q = function(t, e) { + return t === e && (P = 1), 0 + }, + X = {}.hasOwnProperty, + Y = [], + Z = Y.pop, + J = Y.push, + $ = Y.push, + Q = Y.slice, + K = function(t, e) { + for (var n = 0, i = t.length; n < i; n++) + if (t[n] === e) return n; + return -1 + }, + tt = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + et = "[\\x20\\t\\r\\n\\f]", + nt = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + it = "\\[" + et + "*(" + nt + ")(?:" + et + "*([*^$|!~]?=)" + et + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + nt + "))|)" + et + "*\\]", + rt = ":(" + nt + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + it + ")*)|.*)\\)|)", + ot = /[\x20\t\r\n\f]+/g, + at = /^[\x20\t\r\n\f]+|((?:^|[^\\])(?:\\.)*)[\x20\t\r\n\f]+$/g, + st = /^[\x20\t\r\n\f]*,[\x20\t\r\n\f]*/, + ct = /^[\x20\t\r\n\f]*([>+~]|[\x20\t\r\n\f])[\x20\t\r\n\f]*/, + lt = /[\x20\t\r\n\f]|>/, + ut = RegExp(rt), + ht = RegExp("^" + nt + "$"), + pt = { + ID: RegExp("^#(" + nt + ")"), + CLASS: RegExp("^\\.(" + nt + ")"), + TAG: RegExp("^(" + nt + "|[*])"), + ATTR: RegExp("^" + it), + PSEUDO: RegExp("^" + rt), + CHILD: /^:(only|first|last|nth|nth-last)-(child|of-type)(?:\([\x20\t\r\n\f]*(even|odd|(([+-]|)(\d*)n|)[\x20\t\r\n\f]*(?:([+-]|)[\x20\t\r\n\f]*(\d+)|))[\x20\t\r\n\f]*\)|)/i, + bool: RegExp("^(?:" + tt + ")$", "i"), + needsContext: /^[\x20\t\r\n\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\([\x20\t\r\n\f]*((?:-\d)?\d*)[\x20\t\r\n\f]*\)|)(?=[^-]|$)/i + }, + dt = /HTML$/i, + ft = /^(?:input|select|textarea|button)$/i, + mt = /^h\d$/i, + gt = /^[^{]+\{\s*\[native \w/, + vt = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + yt = /[+~]/, + xt = /\\([\da-f]{1,6}[\x20\t\r\n\f]?|([\x20\t\r\n\f])|.)/gi, + bt = function(t, e, n) { + var i = "0x" + e - 65536; + return i != i || n ? e : i < 0 ? String.fromCharCode(i + 65536) : String.fromCharCode(i >> 10 | 55296, 1023 & i | 56320) + }, + _t = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + wt = function(t, e) { + return e ? "\0" === t ? "�" : t.slice(0, -1) + "\\" + t.charCodeAt(t.length - 1).toString(16) + " " : "\\" + t + }, + Mt = function() { + E() + }, + St = f(function(t) { + return 1 == t.disabled && "fieldset" === t.nodeName.toLowerCase() + }, { + dir: "parentNode", + next: "legend" + }); + try { + $.apply(Y = Q.call(B.childNodes), B.childNodes), Y[B.childNodes.length].nodeType + } catch (t) { + $ = { + apply: Y.length ? function(t, e) { + J.apply(t, Q.call(e)) + } : function(t, e) { + for (var n = t.length, i = 0; t[n++] = e[i++];); + t.length = n - 1 + } + } + } + for (x in b = e.support = {}, M = e.isXML = function(t) { + var e = t.namespaceURI, + n = (t.ownerDocument || t).documentElement; + return !dt.test(e || n && n.nodeName || "HTML") + }, E = e.setDocument = function(t) { + var e, n, i = t ? t.ownerDocument || t : B; + return i !== N && 9 === i.nodeType && i.documentElement ? (O = (N = i).documentElement, D = !M(N), B !== N && (n = N.defaultView) && n.top !== n && (n.addEventListener ? n.addEventListener("unload", Mt, 0) : n.attachEvent && n.attachEvent("onunload", Mt)), b.attributes = r(function(t) { + return t.className = "i", !t.getAttribute("className") + }), b.getElementsByTagName = r(function(t) { + return t.appendChild(N.createComment("")), !t.getElementsByTagName("*").length + }), b.getElementsByClassName = gt.test(N.getElementsByClassName), b.getById = r(function(t) { + return O.appendChild(t).id = k, !N.getElementsByName || !N.getElementsByName(k).length + }), b.getById ? (_.filter.ID = function(t) { + var e = t.replace(xt, bt); + return function(t) { + return t.getAttribute("id") === e + } + }, _.find.ID = function(t, e) { + if (void 0 !== e.getElementById && D) { + var n = e.getElementById(t); + return n ? [n] : [] + } + }) : (_.filter.ID = function(t) { + var e = t.replace(xt, bt); + return function(t) { + var n = void 0 !== t.getAttributeNode && t.getAttributeNode("id"); + return n && n.value === e + } + }, _.find.ID = function(t, e) { + if (void 0 !== e.getElementById && D) { + var n, i, r, o = e.getElementById(t); + if (o) { + if ((n = o.getAttributeNode("id")) && n.value === t) return [o]; + for (r = e.getElementsByName(t), i = 0; o = r[i++];) + if ((n = o.getAttributeNode("id")) && n.value === t) return [o] + } + return [] + } + }), _.find.TAG = b.getElementsByTagName ? function(t, e) { + return void 0 !== e.getElementsByTagName ? e.getElementsByTagName(t) : b.qsa ? e.querySelectorAll(t) : void 0 + } : function(t, e) { + var n, i = [], + r = 0, + o = e.getElementsByTagName(t); + if ("*" === t) { + for (; n = o[r++];) 1 === n.nodeType && i.push(n); + return i + } + return o + }, _.find.CLASS = b.getElementsByClassName && function(t, e) { + if (void 0 !== e.getElementsByClassName && D) return e.getElementsByClassName(t) + }, z = [], I = [], (b.qsa = gt.test(N.querySelectorAll)) && (r(function(t) { + O.appendChild(t).innerHTML = "", t.querySelectorAll("[msallowcapture^='']").length && I.push("[*^$]=" + et + "*(?:''|\"\")"), t.querySelectorAll("[selected]").length || I.push("\\[" + et + "*(?:value|" + tt + ")"), t.querySelectorAll("[id~=" + k + "-]").length || I.push("~="), t.querySelectorAll(":checked").length || I.push(":checked"), t.querySelectorAll("a#" + k + "+*").length || I.push(".#.+[+~]") + }), r(function(t) { + t.innerHTML = ""; + var e = N.createElement("input"); + e.setAttribute("type", "hidden"), t.appendChild(e).setAttribute("name", "D"), t.querySelectorAll("[name=d]").length && I.push("name" + et + "*[*^$|!~]?="), 2 !== t.querySelectorAll(":enabled").length && I.push(":enabled", ":disabled"), O.appendChild(t).disabled = 1, 2 !== t.querySelectorAll(":disabled").length && I.push(":enabled", ":disabled"), t.querySelectorAll("*,:x"), I.push(",.*:") + })), (b.matchesSelector = gt.test(R = O.matches || O.webkitMatchesSelector || O.mozMatchesSelector || O.oMatchesSelector || O.msMatchesSelector)) && r(function(t) { + b.disconnectedMatch = R.call(t, "*"), R.call(t, "[s!='']:x"), z.push("!=", rt) + }), I = I.length && RegExp(I.join("|")), z = z.length && RegExp(z.join("|")), e = gt.test(O.compareDocumentPosition), F = e || gt.test(O.contains) ? function(t, e) { + var n = 9 === t.nodeType ? t.documentElement : t, + i = e && e.parentNode; + return t === i || !(!i || 1 !== i.nodeType || !(n.contains ? n.contains(i) : t.compareDocumentPosition && 16 & t.compareDocumentPosition(i))) + } : function(t, e) { + if (e) + for (; e = e.parentNode;) + if (e === t) return 1; + return 0 + }, q = e ? function(t, e) { + if (t === e) return P = 1, 0; + var n = !t.compareDocumentPosition - !e.compareDocumentPosition; + return n || (1 & (n = (t.ownerDocument || t) === (e.ownerDocument || e) ? t.compareDocumentPosition(e) : 1) || !b.sortDetached && e.compareDocumentPosition(t) === n ? t === N || t.ownerDocument === B && F(B, t) ? -1 : e === N || e.ownerDocument === B && F(B, e) ? 1 : C ? K(C, t) - K(C, e) : 0 : 4 & n ? -1 : 1) + } : function(t, e) { + if (t === e) return P = 1, 0; + var n, i = 0, + r = t.parentNode, + o = e.parentNode, + s = [t], + c = [e]; + if (!r || !o) return t === N ? -1 : e === N ? 1 : r ? -1 : o ? 1 : C ? K(C, t) - K(C, e) : 0; + if (r === o) return a(t, e); + for (n = t; n = n.parentNode;) s.unshift(n); + for (n = e; n = n.parentNode;) c.unshift(n); + for (; s[i] === c[i];) i++; + return i ? a(s[i], c[i]) : s[i] === B ? -1 : c[i] === B ? 1 : 0 + }, N) : N + }, e.matches = function(t, n) { + return e(t, null, null, n) + }, e.matchesSelector = function(t, n) { + if ((t.ownerDocument || t) !== N && E(t), b.matchesSelector && D && !H[n + " "] && (!z || !z.test(n)) && (!I || !I.test(n))) try { + var i = R.call(t, n); + if (i || b.disconnectedMatch || t.document && 11 !== t.document.nodeType) return i + } catch (t) { + H(n, 1) + } + return e(n, N, null, [t]).length > 0 + }, e.contains = function(t, e) { + return (t.ownerDocument || t) !== N && E(t), F(t, e) + }, e.attr = function(t, e) { + (t.ownerDocument || t) !== N && E(t); + var n = _.attrHandle[e.toLowerCase()], + i = n && X.call(_.attrHandle, e.toLowerCase()) ? n(t, e, !D) : void 0; + return void 0 !== i ? i : b.attributes || !D ? t.getAttribute(e) : (i = t.getAttributeNode(e)) && i.specified ? i.value : null + }, e.escape = function(t) { + return (t + "").replace(_t, wt) + }, e.error = function(t) { + throw Error("Syntax error, unrecognized expression: " + t) + }, e.uniqueSort = function(t) { + var e, n = [], + i = 0, + r = 0; + if (P = !b.detectDuplicates, C = !b.sortStable && t.slice(0), t.sort(q), P) { + for (; e = t[r++];) e === t[r] && (i = n.push(r)); + for (; i--;) t.splice(n[i], 1) + } + return C = null, t + }, w = e.getText = function(t) { + var e, n = "", + i = 0, + r = t.nodeType; + if (r) { + if (1 === r || 9 === r || 11 === r) { + if ("string" == typeof t.textContent) return t.textContent; + for (t = t.firstChild; t; t = t.nextSibling) n += w(t) + } else if (3 === r || 4 === r) return t.nodeValue + } else + for (; e = t[i++];) n += w(e); + return n + }, (_ = e.selectors = { + cacheLength: 50, + createPseudo: i, + match: pt, + attrHandle: {}, + find: {}, + relative: { + ">": { + dir: "parentNode", + first: 1 + }, + " ": { + dir: "parentNode" + }, + "+": { + dir: "previousSibling", + first: 1 + }, + "~": { + dir: "previousSibling" + } + }, + preFilter: { + ATTR: function(t) { + return t[1] = t[1].replace(xt, bt), t[3] = (t[3] || t[4] || t[5] || "").replace(xt, bt), "~=" === t[2] && (t[3] = " " + t[3] + " "), t.slice(0, 4) + }, + CHILD: function(t) { + return t[1] = t[1].toLowerCase(), "nth" === t[1].slice(0, 3) ? (t[3] || e.error(t[0]), t[4] = +(t[4] ? t[5] + (t[6] || 1) : 2 * ("even" === t[3] || "odd" === t[3])), t[5] = +(t[7] + t[8] || "odd" === t[3])) : t[3] && e.error(t[0]), t + }, + PSEUDO: function(t) { + var e, n = !t[6] && t[2]; + return pt.CHILD.test(t[0]) ? null : (t[3] ? t[2] = t[4] || t[5] || "" : n && ut.test(n) && (e = S(n, 1)) && (e = n.indexOf(")", n.length - e) - n.length) && (t[0] = t[0].slice(0, e), t[2] = n.slice(0, e)), t.slice(0, 3)) + } + }, + filter: { + TAG: function(t) { + var e = t.replace(xt, bt).toLowerCase(); + return "*" === t ? function() { + return 1 + } : function(t) { + return t.nodeName && t.nodeName.toLowerCase() === e + } + }, + CLASS: function(t) { + var e = V[t + " "]; + return e || (e = RegExp("(^|" + et + ")" + t + "(" + et + "|$)")) && V(t, function(t) { + return e.test("string" == typeof t.className && t.className || void 0 !== t.getAttribute && t.getAttribute("class") || "") + }) + }, + ATTR: function(t, n, i) { + return function(r) { + var o = e.attr(r, t); + return null == o ? "!=" === n : n ? (o += "", "=" === n ? o === i : "!=" === n ? o !== i : "^=" === n ? i && 0 === o.indexOf(i) : "*=" === n ? i && o.indexOf(i) > -1 : "$=" === n ? i && o.slice(-i.length) === i : "~=" === n ? (" " + o.replace(ot, " ") + " ").indexOf(i) > -1 : "|=" === n ? o === i || o.slice(0, i.length + 1) === i + "-" : 0) : 1 + } + }, + CHILD: function(t, e, n, i, r) { + var o = "nth" !== t.slice(0, 3), + a = "last" !== t.slice(-4), + s = "of-type" === e; + return 1 === i && 0 === r ? function(t) { + return !!t.parentNode + } : function(e, n, c) { + var l, u, h, p, d, f, m = o !== a ? "nextSibling" : "previousSibling", + g = e.parentNode, + v = s && e.nodeName.toLowerCase(), + y = !c && !s, + x = 0; + if (g) { + if (o) { + for (; m;) { + for (p = e; p = p[m];) + if (s ? p.nodeName.toLowerCase() === v : 1 === p.nodeType) return 0; + f = m = "only" === t && !f && "nextSibling" + } + return 1 + } + if (f = [a ? g.firstChild : g.lastChild], a && y) { + for (x = (d = (l = (u = (h = (p = g)[k] || (p[k] = {}))[p.uniqueID] || (h[p.uniqueID] = {}))[t] || [])[0] === U && l[1]) && l[2], p = d && g.childNodes[d]; p = ++d && p && p[m] || (x = d = 0) || f.pop();) + if (1 === p.nodeType && ++x && p === e) { + u[t] = [U, d, x]; + break + } + } else if (y && (x = d = (l = (u = (h = (p = e)[k] || (p[k] = {}))[p.uniqueID] || (h[p.uniqueID] = {}))[t] || [])[0] === U && l[1]), 0 == x) + for (; + (p = ++d && p && p[m] || (x = d = 0) || f.pop()) && ((s ? p.nodeName.toLowerCase() !== v : 1 !== p.nodeType) || !++x || (y && ((u = (h = p[k] || (p[k] = {}))[p.uniqueID] || (h[p.uniqueID] = {}))[t] = [U, x]), p !== e));); + return (x -= r) === i || x % i == 0 && x / i >= 0 + } + } + }, + PSEUDO: function(t, n) { + var r, o = _.pseudos[t] || _.setFilters[t.toLowerCase()] || e.error("unsupported pseudo: " + t); + return o[k] ? o(n) : o.length > 1 ? (r = [t, t, "", n], _.setFilters.hasOwnProperty(t.toLowerCase()) ? i(function(t, e) { + for (var i, r = o(t, n), a = r.length; a--;) t[i = K(t, r[a])] = !(e[i] = r[a]) + }) : function(t) { + return o(t, 0, r) + }) : o + } + }, + pseudos: { + not: i(function(t) { + var e = [], + n = [], + r = T(t.replace(at, "$1")); + return r[k] ? i(function(t, e, n, i) { + for (var o, a = r(t, null, i, []), s = t.length; s--;)(o = a[s]) && (t[s] = !(e[s] = o)) + }) : function(t, i, o) { + return e[0] = t, r(e, null, o, n), e[0] = null, !n.pop() + } + }), + has: i(function(t) { + return function(n) { + return e(t, n).length > 0 + } + }), + contains: i(function(t) { + return t = t.replace(xt, bt), + function(e) { + return (e.textContent || w(e)).indexOf(t) > -1 + } + }), + lang: i(function(t) { + return ht.test(t || "") || e.error("unsupported lang: " + t), t = t.replace(xt, bt).toLowerCase(), + function(e) { + var n; + do { + if (n = D ? e.lang : e.getAttribute("xml:lang") || e.getAttribute("lang")) return (n = n.toLowerCase()) === t || 0 === n.indexOf(t + "-") + } while ((e = e.parentNode) && 1 === e.nodeType); + return 0 + } + }), + target: function(e) { + var n = t.location && t.location.hash; + return n && n.slice(1) === e.id + }, + root: function(t) { + return t === O + }, + focus: function(t) { + return t === N.activeElement && (!N.hasFocus || N.hasFocus()) && !!(t.type || t.href || ~t.tabIndex) + }, + enabled: l(0), + disabled: l(1), + checked: function(t) { + var e = t.nodeName.toLowerCase(); + return "input" === e && !!t.checked || "option" === e && !!t.selected + }, + selected: function(t) { + return t.parentNode && t.parentNode.selectedIndex, 1 == t.selected + }, + empty: function(t) { + for (t = t.firstChild; t; t = t.nextSibling) + if (t.nodeType < 6) return 0; + return 1 + }, + parent: function(t) { + return !_.pseudos.empty(t) + }, + header: function(t) { + return mt.test(t.nodeName) + }, + input: function(t) { + return ft.test(t.nodeName) + }, + button: function(t) { + var e = t.nodeName.toLowerCase(); + return "input" === e && "button" === t.type || "button" === e + }, + text: function(t) { + var e; + return "input" === t.nodeName.toLowerCase() && "text" === t.type && (null == (e = t.getAttribute("type")) || "text" === e.toLowerCase()) + }, + first: u(function() { + return [0] + }), + last: u(function(t, e) { + return [e - 1] + }), + eq: u(function(t, e, n) { + return [n < 0 ? n + e : n] + }), + even: u(function(t, e) { + for (var n = 0; n < e; n += 2) t.push(n); + return t + }), + odd: u(function(t, e) { + for (var n = 1; n < e; n += 2) t.push(n); + return t + }), + lt: u(function(t, e, n) { + for (var i = n < 0 ? n + e : n > e ? e : n; --i >= 0;) t.push(i); + return t + }), + gt: u(function(t, e, n) { + for (var i = n < 0 ? n + e : n; ++i < e;) t.push(i); + return t + }) + } + }).pseudos.nth = _.pseudos.eq, { + radio: 1, + checkbox: 1, + file: 1, + password: 1, + image: 1 + }) _.pseudos[x] = s(x); + for (x in { + submit: 1, + reset: 1 + }) _.pseudos[x] = c(x); + return p.prototype = _.filters = _.pseudos, _.setFilters = new p, S = e.tokenize = function(t, n) { + var i, r, o, a, s, c, l, u = G[t + " "]; + if (u) return n ? 0 : u.slice(0); + for (s = t, c = [], l = _.preFilter; s;) { + for (a in i && !(r = st.exec(s)) || (r && (s = s.slice(r[0].length) || s), c.push(o = [])), i = 0, (r = ct.exec(s)) && (i = r.shift(), o.push({ + value: i, + type: r[0].replace(at, " ") + }), s = s.slice(i.length)), _.filter) !(r = pt[a].exec(s)) || l[a] && !(r = l[a](r)) || (i = r.shift(), o.push({ + value: i, + type: a, + matches: r + }), s = s.slice(i.length)); + if (!i) break + } + return n ? s.length : s ? e.error(t) : G(t, c).slice(0) + }, T = e.compile = function(t, n) { + var r, o = [], + a = [], + s = W[t + " "]; + if (!s) { + for (n || (n = S(t)), r = n.length; r--;)(s = y(n[r]))[k] ? o.push(s) : a.push(s); + (s = W(t, function(t, n) { + var r = n.length > 0, + o = t.length > 0, + a = function(i, a, s, c, l) { + var u, h, p, d = 0, + f = "0", + m = i && [], + v = [], + y = L, + x = i || o && _.find.TAG("*", l), + b = U += null == y ? 1 : Math.random() || .1, + w = x.length; + for (l && (L = a === N || a || l); f !== w && null != (u = x[f]); f++) { + if (o && u) { + for (h = 0, a || u.ownerDocument === N || (E(u), s = !D); p = t[h++];) + if (p(u, a || N, s)) { + c.push(u); + break + } + l && (U = b) + } + r && ((u = !p && u) && d--, i && m.push(u)) + } + if (d += f, r && f !== d) { + for (h = 0; p = n[h++];) p(m, v, a, s); + if (i) { + if (d > 0) + for (; f--;) m[f] || v[f] || (v[f] = Z.call(c)); + v = g(v) + } + $.apply(c, v), l && !i && v.length > 0 && d + n.length > 1 && e.uniqueSort(c) + } + return l && (U = b, L = y), m + }; + return r ? i(a) : a + }(a, o))).selector = t + } + return s + }, A = e.select = function(t, e, n, i) { + var r, o, a, s, c, l = "function" == typeof t && t, + u = !i && S(t = l.selector || t); + if (n = n || [], 1 === u.length) { + if ((o = u[0] = u[0].slice(0)).length > 2 && "ID" === (a = o[0]).type && 9 === e.nodeType && D && _.relative[o[1].type]) { + if (!(e = (_.find.ID(a.matches[0].replace(xt, bt), e) || [])[0])) return n; + l && (e = e.parentNode), t = t.slice(o.shift().value.length) + } + for (r = pt.needsContext.test(t) ? 0 : o.length; r-- && (a = o[r], !_.relative[s = a.type]);) + if ((c = _.find[s]) && (i = c(a.matches[0].replace(xt, bt), yt.test(o[0].type) && h(e.parentNode) || e))) { + if (o.splice(r, 1), !(t = i.length && d(o))) return $.apply(n, i), n; + break + } + } + return (l || T(t, u))(i, e, !D, n, !e || yt.test(t) && h(e.parentNode) || e), n + }, b.sortStable = k.split("").sort(q).join("") === k, b.detectDuplicates = !!P, E(), b.sortDetached = r(function(t) { + return 1 & t.compareDocumentPosition(N.createElement("fieldset")) + }), r(function(t) { + return t.innerHTML = "", "#" === t.firstChild.getAttribute("href") + }) || o("type|href|height|width", function(t, e, n) { + if (!n) return t.getAttribute(e, "type" === e.toLowerCase() ? 1 : 2) + }), b.attributes && r(function(t) { + return t.innerHTML = "", t.firstChild.setAttribute("value", ""), "" === t.firstChild.getAttribute("value") + }) || o("value", function(t, e, n) { + if (!n && "input" === t.nodeName.toLowerCase()) return t.defaultValue + }), r(function(t) { + return null == t.getAttribute("disabled") + }) || o(tt, function(t, e, n) { + var i; + if (!n) return 1 == t[e] ? e.toLowerCase() : (i = t.getAttributeNode(e)) && i.specified ? i.value : null + }), e + }(t), Ze.find = K, Ze.expr = K.selectors, Ze.expr[":"] = Ze.expr.pseudos, Ze.uniqueSort = Ze.unique = K.uniqueSort, Ze.text = K.getText, Ze.isXMLDoc = K.isXML, Ze.contains = K.contains, Ze.escapeSelector = K.escape, tt = function(t, e, n) { + for (var i = [], r = void 0 !== n; + (t = t[e]) && 9 !== t.nodeType;) + if (1 === t.nodeType) { + if (r && Ze(t).is(n)) break; + i.push(t) + } + return i + }, et = function(t, e) { + for (var n = []; t; t = t.nextSibling) 1 === t.nodeType && t !== e && n.push(t); + return n + }, nt = Ze.expr.match.needsContext, it = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i, Ze.filter = function(t, e, n) { + var i = e[0]; + return n && (t = ":not(" + t + ")"), 1 === e.length && 1 === i.nodeType ? Ze.find.matchesSelector(i, t) ? [i] : [] : Ze.find.matches(t, Ze.grep(e, function(t) { + return 1 === t.nodeType + })) + }, Ze.fn.extend({ + find: function(t) { + var e, n, i = this.length, + r = this; + if ("string" != typeof t) return this.pushStack(Ze(t).filter(function() { + for (e = 0; e < i; e++) + if (Ze.contains(r[e], this)) return 1 + })); + for (n = this.pushStack([]), e = 0; e < i; e++) Ze.find(t, r[e], n); + return i > 1 ? Ze.uniqueSort(n) : n + }, + filter: function(t) { + return this.pushStack(a(this, t || [], 0)) + }, + not: function(t) { + return this.pushStack(a(this, t || [], 1)) + }, + is: function(t) { + return !!a(this, "string" == typeof t && nt.test(t) ? Ze(t) : t || [], 0).length + } + }), ot = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, (Ze.fn.init = function(t, e, n) { + var i, r; + if (!t) return this; + if (n = n || rt, "string" == typeof t) { + if (!(i = "<" === t[0] && ">" === t[t.length - 1] && t.length >= 3 ? [null, t, null] : ot.exec(t)) || !i[1] && e) return !e || e.jquery ? (e || n).find(t) : this.constructor(e).find(t); + if (i[1]) { + if (e = e instanceof Ze ? e[0] : e, Ze.merge(this, Ze.parseHTML(i[1], e && e.nodeType ? e.ownerDocument || e : Ie, 1)), it.test(i[1]) && Ze.isPlainObject(e)) + for (i in e) qe(this[i]) ? this[i](e[i]) : this.attr(i, e[i]); + return this + } + return (r = Ie.getElementById(i[2])) && (this[0] = r, this.length = 1), this + } + return t.nodeType ? (this[0] = t, this.length = 1, this) : qe(t) ? void 0 !== n.ready ? n.ready(t) : t(Ze) : Ze.makeArray(t, this) + }).prototype = Ze.fn, rt = Ze(Ie), at = /^(?:parents|prev(?:Until|All))/, st = { + children: 1, + contents: 1, + next: 1, + prev: 1 + }, Ze.fn.extend({ + has: function(t) { + var e = Ze(t, this), + n = e.length; + return this.filter(function() { + for (var t = 0; t < n; t++) + if (Ze.contains(this, e[t])) return 1 + }) + }, + closest: function(t, e) { + var n, i = 0, + r = this.length, + o = [], + a = "string" != typeof t && Ze(t); + if (!nt.test(t)) + for (; i < r; i++) + for (n = this[i]; n && n !== e; n = n.parentNode) + if (n.nodeType < 11 && (a ? a.index(n) > -1 : 1 === n.nodeType && Ze.find.matchesSelector(n, t))) { + o.push(n); + break + } + return this.pushStack(o.length > 1 ? Ze.uniqueSort(o) : o) + }, + index: function(t) { + return t ? "string" == typeof t ? Be.call(Ze(t), this[0]) : Be.call(this, t.jquery ? t[0] : t) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1 + }, + add: function(t, e) { + return this.pushStack(Ze.uniqueSort(Ze.merge(this.get(), Ze(t, e)))) + }, + addBack: function(t) { + return this.add(null == t ? this.prevObject : this.prevObject.filter(t)) + } + }), Ze.each({ + parent: function(t) { + var e = t.parentNode; + return e && 11 !== e.nodeType ? e : null + }, + parents: function(t) { + return tt(t, "parentNode") + }, + parentsUntil: function(t, e, n) { + return tt(t, "parentNode", n) + }, + next: function(t) { + return s(t, "nextSibling") + }, + prev: function(t) { + return s(t, "previousSibling") + }, + nextAll: function(t) { + return tt(t, "nextSibling") + }, + prevAll: function(t) { + return tt(t, "previousSibling") + }, + nextUntil: function(t, e, n) { + return tt(t, "nextSibling", n) + }, + prevUntil: function(t, e, n) { + return tt(t, "previousSibling", n) + }, + siblings: function(t) { + return et((t.parentNode || {}).firstChild, t) + }, + children: function(t) { + return et(t.firstChild) + }, + contents: function(t) { + return void 0 !== t.contentDocument ? t.contentDocument : (o(t, "template") && (t = t.content || t), Ze.merge([], t.childNodes)) + } + }, function(t, e) { + Ze.fn[t] = function(n, i) { + var r = Ze.map(this, e, n); + return "Until" !== t.slice(-5) && (i = n), i && "string" == typeof i && (r = Ze.filter(i, r)), this.length > 1 && (st[t] || Ze.uniqueSort(r), at.test(t) && r.reverse()), this.pushStack(r) + } + }), ct = /[^\x20\t\r\n\f]+/g, Ze.Callbacks = function(t) { + t = "string" == typeof t ? function(t) { + var e = {}; + return Ze.each(t.match(ct) || [], function(t, n) { + e[n] = 1 + }), e + }(t) : Ze.extend({}, t); + var e, n, r, o, a = [], + s = [], + c = -1, + l = function() { + for (o = o || t.once, r = e = 1; s.length; c = -1) + for (n = s.shift(); ++c < a.length;) 0 == a[c].apply(n[0], n[1]) && t.stopOnFalse && (c = a.length, n = 0); + t.memory || (n = 0), e = 0, o && (a = n ? [] : "") + }, + u = { + add: function() { + return a && (n && !e && (c = a.length - 1, s.push(n)), function e(n) { + Ze.each(n, function(n, r) { + qe(r) ? t.unique && u.has(r) || a.push(r) : r && r.length && "string" !== i(r) && e(r) + }) + }(arguments), n && !e && l()), this + }, + remove: function() { + return Ze.each(arguments, function(t, e) { + for (var n; + (n = Ze.inArray(e, a, n)) > -1;) a.splice(n, 1), n <= c && c-- + }), this + }, + has: function(t) { + return t ? Ze.inArray(t, a) > -1 : a.length > 0 + }, + empty: function() { + return a && (a = []), this + }, + disable: function() { + return o = s = [], a = n = "", this + }, + disabled: function() { + return !a + }, + lock: function() { + return o = s = [], n || e || (a = n = ""), this + }, + locked: function() { + return !!o + }, + fireWith: function(t, n) { + return o || (n = [t, (n = n || []).slice ? n.slice() : n], s.push(n), e || l()), this + }, + fire: function() { + return u.fireWith(this, arguments), this + }, + fired: function() { + return !!r + } + }; + return u + }, Ze.extend({ + Deferred: function(e) { + var n = [ + ["notify", "progress", Ze.Callbacks("memory"), Ze.Callbacks("memory"), 2], + ["resolve", "done", Ze.Callbacks("once memory"), Ze.Callbacks("once memory"), 0, "resolved"], + ["reject", "fail", Ze.Callbacks("once memory"), Ze.Callbacks("once memory"), 1, "rejected"] + ], + i = "pending", + r = { + state: function() { + return i + }, + always: function() { + return o.done(arguments).fail(arguments), this + }, + catch: function(t) { + return r.then(null, t) + }, + pipe: function() { + var t = arguments; + return Ze.Deferred(function(e) { + Ze.each(n, function(n, i) { + var r = qe(t[i[4]]) && t[i[4]]; + o[i[1]](function() { + var t = r && r.apply(this, arguments); + t && qe(t.promise) ? t.promise().progress(e.notify).done(e.resolve).fail(e.reject) : e[i[0] + "With"](this, r ? [t] : arguments) + }) + }), t = null + }).promise() + }, + then: function(e, i, r) { + function o(e, n, i, r) { + return function() { + var s = this, + u = arguments, + h = function() { + var t, h; + if (!(e < a)) { + if ((t = i.apply(s, u)) === n.promise()) throw new TypeError("Thenable self-resolution"); + h = t && ("object" == typeof t || "function" == typeof t) && t.then, qe(h) ? r ? h.call(t, o(a, n, c, r), o(a, n, l, r)) : (a++, h.call(t, o(a, n, c, r), o(a, n, l, r), o(a, n, c, n.notifyWith))) : (i !== c && (s = void 0, u = [t]), (r || n.resolveWith)(s, u)) + } + }, + p = r ? h : function() { + try { + h() + } catch (t) { + Ze.Deferred.exceptionHook && Ze.Deferred.exceptionHook(t, p.stackTrace), e + 1 >= a && (i !== l && (s = void 0, u = [t]), n.rejectWith(s, u)) + } + }; + e ? p() : (Ze.Deferred.getStackHook && (p.stackTrace = Ze.Deferred.getStackHook()), t.setTimeout(p)) + } + } + var a = 0; + return Ze.Deferred(function(t) { + n[0][3].add(o(0, t, qe(r) ? r : c, t.notifyWith)), n[1][3].add(o(0, t, qe(e) ? e : c)), n[2][3].add(o(0, t, qe(i) ? i : l)) + }).promise() + }, + promise: function(t) { + return null != t ? Ze.extend(t, r) : r + } + }, + o = {}; + return Ze.each(n, function(t, e) { + var a = e[2], + s = e[5]; + r[e[1]] = a.add, s && a.add(function() { + i = s + }, n[3 - t][2].disable, n[3 - t][3].disable, n[0][2].lock, n[0][3].lock), a.add(e[3].fire), o[e[0]] = function() { + return o[e[0] + "With"](this === o ? void 0 : this, arguments), this + }, o[e[0] + "With"] = a.fireWith + }), r.promise(o), e && e.call(o, o), o + }, + when: function(t) { + var e = arguments.length, + n = e, + i = Array(n), + r = Re.call(arguments), + o = Ze.Deferred(), + a = function(t) { + return function(n) { + i[t] = this, r[t] = arguments.length > 1 ? Re.call(arguments) : n, --e || o.resolveWith(i, r) + } + }; + if (e <= 1 && (u(t, o.done(a(n)).resolve, o.reject, !e), "pending" === o.state() || qe(r[n] && r[n].then))) return o.then(); + for (; n--;) u(r[n], a(n), o.reject); + return o.promise() + } + }), lt = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/, Ze.Deferred.exceptionHook = function(e, n) { + t.console && t.console.warn && e && lt.test(e.name) && t.console.warn("jQuery.Deferred exception: " + e.message, e.stack, n) + }, Ze.readyException = function(e) { + t.setTimeout(function() { + throw e + }) + }, ut = Ze.Deferred(), Ze.fn.ready = function(t) { + return ut.then(t).catch(function(t) { + Ze.readyException(t) + }), this + }, Ze.extend({ + isReady: 0, + readyWait: 1, + ready: function(t) { + (1 == t ? --Ze.readyWait : Ze.isReady) || (Ze.isReady = 1, 1 != t && --Ze.readyWait > 0 || ut.resolveWith(Ie, [Ze])) + } + }), Ze.ready.then = ut.then, "complete" === Ie.readyState || "loading" !== Ie.readyState && !Ie.documentElement.doScroll ? t.setTimeout(Ze.ready) : (Ie.addEventListener("DOMContentLoaded", h), t.addEventListener("load", h)), ht = function(t, e, n, r, o, a, s) { + var c = 0, + l = t.length, + u = null == n; + if ("object" === i(n)) + for (c in o = 1, n) ht(t, e, c, n[c], 1, a, s); + else if (void 0 !== r && (o = 1, qe(r) || (s = 1), u && (s ? (e.call(t, r), e = null) : (u = e, e = function(t, e, n) { + return u.call(Ze(t), n) + })), e)) + for (; c < l; c++) e(t[c], n, s ? r : r.call(t[c], c, e(t[c], n))); + return o ? t : u ? e.call(t) : l ? e(t[0], n) : a + }, pt = /^-ms-/, dt = /-([a-z])/g, ft = function(t) { + return 1 === t.nodeType || 9 === t.nodeType || !+t.nodeType + }, f.uid = 1, f.prototype = { + cache: function(t) { + var e = t[this.expando]; + return e || (e = {}, ft(t) && (t.nodeType ? t[this.expando] = e : Object.defineProperty(t, this.expando, { + value: e, + configurable: 1 + }))), e + }, + set: function(t, e, n) { + var i, r = this.cache(t); + if ("string" == typeof e) r[d(e)] = n; + else + for (i in e) r[d(i)] = e[i]; + return r + }, + get: function(t, e) { + return void 0 === e ? this.cache(t) : t[this.expando] && t[this.expando][d(e)] + }, + access: function(t, e, n) { + return void 0 === e || e && "string" == typeof e && void 0 === n ? this.get(t, e) : (this.set(t, e, n), void 0 !== n ? n : e) + }, + remove: function(t, e) { + var n, i = t[this.expando]; + if (void 0 !== i) { + if (void 0 !== e) { + n = (e = Array.isArray(e) ? e.map(d) : (e = d(e)) in i ? [e] : e.match(ct) || []).length; + for (; n--;) delete i[e[n]] + }(void 0 === e || Ze.isEmptyObject(i)) && (t.nodeType ? t[this.expando] = void 0 : delete t[this.expando]) + } + }, + hasData: function(t) { + var e = t[this.expando]; + return void 0 !== e && !Ze.isEmptyObject(e) + } + }, mt = new f, gt = new f, vt = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, yt = /[A-Z]/g, Ze.extend({ + hasData: function(t) { + return gt.hasData(t) || mt.hasData(t) + }, + data: function(t, e, n) { + return gt.access(t, e, n) + }, + removeData: function(t, e) { + gt.remove(t, e) + }, + _data: function(t, e, n) { + return mt.access(t, e, n) + }, + _removeData: function(t, e) { + mt.remove(t, e) + } + }), Ze.fn.extend({ + data: function(t, e) { + var n, i, r, o = this[0], + a = o && o.attributes; + if (void 0 === t) { + if (this.length && (r = gt.get(o), 1 === o.nodeType && !mt.get(o, "hasDataAttrs"))) { + for (n = a.length; n--;) a[n] && 0 === (i = a[n].name).indexOf("data-") && (i = d(i.slice(5)), m(o, i, r[i])); + mt.set(o, "hasDataAttrs", 1) + } + return r + } + return "object" == typeof t ? this.each(function() { + gt.set(this, t) + }) : ht(this, function(e) { + var n; + if (o && void 0 === e) return void 0 !== (n = gt.get(o, t)) ? n : void 0 !== (n = m(o, t)) ? n : void 0; + this.each(function() { + gt.set(this, t, e) + }) + }, null, e, arguments.length > 1, null, 1) + }, + removeData: function(t) { + return this.each(function() { + gt.remove(this, t) + }) + } + }), Ze.extend({ + queue: function(t, e, n) { + var i; + if (t) return e = (e || "fx") + "queue", i = mt.get(t, e), n && (!i || Array.isArray(n) ? i = mt.access(t, e, Ze.makeArray(n)) : i.push(n)), i || [] + }, + dequeue: function(t, e) { + e = e || "fx"; + var n = Ze.queue(t, e), + i = n.length, + r = n.shift(), + o = Ze._queueHooks(t, e); + "inprogress" === r && (r = n.shift(), i--), r && ("fx" === e && n.unshift("inprogress"), delete o.stop, r.call(t, function() { + Ze.dequeue(t, e) + }, o)), !i && o && o.empty.fire() + }, + _queueHooks: function(t, e) { + var n = e + "queueHooks"; + return mt.get(t, n) || mt.access(t, n, { + empty: Ze.Callbacks("once memory").add(function() { + mt.remove(t, [e + "queue", n]) + }) + }) + } + }), Ze.fn.extend({ + queue: function(t, e) { + var n = 2; + return "string" != typeof t && (e = t, t = "fx", n--), arguments.length < n ? Ze.queue(this[0], t) : void 0 === e ? this : this.each(function() { + var n = Ze.queue(this, t, e); + Ze._queueHooks(this, t), "fx" === t && "inprogress" !== n[0] && Ze.dequeue(this, t) + }) + }, + dequeue: function(t) { + return this.each(function() { + Ze.dequeue(this, t) + }) + }, + clearQueue: function(t) { + return this.queue(t || "fx", []) + }, + promise: function(t, e) { + var n, i = 1, + r = Ze.Deferred(), + o = this, + a = this.length, + s = function() { + --i || r.resolveWith(o, [o]) + }; + for ("string" != typeof t && (e = t, t = void 0), t = t || "fx"; a--;)(n = mt.get(o[a], t + "queueHooks")) && n.empty && (i++, n.empty.add(s)); + return s(), r.promise(e) + } + }), bt = RegExp("^(?:([+-])=|)(" + (xt = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source) + ")([a-z%]*)$", "i"), _t = ["Top", "Right", "Bottom", "Left"], wt = Ie.documentElement, Mt = function(t) { + return Ze.contains(t.ownerDocument, t) + }, St = { + composed: 1 + }, wt.getRootNode && (Mt = function(t) { + return Ze.contains(t.ownerDocument, t) || t.getRootNode(St) === t.ownerDocument + }), Tt = function(t, e) { + return "none" === (t = e || t).style.display || "" === t.style.display && Mt(t) && "none" === Ze.css(t, "display") + }, At = function(t, e, n, i) { + var r, o, a = {}; + for (o in e) a[o] = t.style[o], t.style[o] = e[o]; + for (o in r = n.apply(t, i || []), e) t.style[o] = a[o]; + return r + }, Lt = {}, Ze.fn.extend({ + show: function() { + return y(this, 1) + }, + hide: function() { + return y(this) + }, + toggle: function(t) { + return "boolean" == typeof t ? t ? this.show() : this.hide() : this.each(function() { + Tt(this) ? Ze(this).show() : Ze(this).hide() + }) + } + }), Ct = /^(?:checkbox|radio)$/i, Pt = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i, Et = /^$|^module$|\/(?:java|ecma)script/i, (Nt = { + option: [1, ""], + thead: [1, "", "
"], + col: [2, "", "
"], + tr: [2, "", "
"], + td: [3, "", "
"], + _default: [0, "", ""] + }).optgroup = Nt.option, Nt.tbody = Nt.tfoot = Nt.colgroup = Nt.caption = Nt.thead, Nt.th = Nt.td, Ot = /<|&#?\w+;/, Ee = Ie.createDocumentFragment().appendChild(Ie.createElement("div")), (Ne = Ie.createElement("input")).setAttribute("type", "radio"), Ne.setAttribute("checked", "checked"), Ne.setAttribute("name", "t"), Ee.appendChild(Ne), He.checkClone = Ee.cloneNode(1).cloneNode(1).lastChild.checked, Ee.innerHTML = "", He.noCloneChecked = !!Ee.cloneNode(1).lastChild.defaultValue, Dt = /^key/, It = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, zt = /^([^.]*)(?:\.(.+)|)/, Ze.event = { + global: {}, + add: function(t, e, n, i, r) { + var o, a, s, c, l, u, h, p, d, f, m, g = mt.get(t); + if (g) + for (n.handler && (n = (o = n).handler, r = o.selector), r && Ze.find.matchesSelector(wt, r), n.guid || (n.guid = Ze.guid++), (c = g.events) || (c = g.events = {}), (a = g.handle) || (a = g.handle = function(e) { + return void 0 !== Ze && Ze.event.triggered !== e.type ? Ze.event.dispatch.apply(t, arguments) : void 0 + }), l = (e = (e || "").match(ct) || [""]).length; l--;) d = m = (s = zt.exec(e[l]) || [])[1], f = (s[2] || "").split(".").sort(), d && (h = Ze.event.special[d] || {}, d = (r ? h.delegateType : h.bindType) || d, h = Ze.event.special[d] || {}, u = Ze.extend({ + type: d, + origType: m, + data: i, + handler: n, + guid: n.guid, + selector: r, + needsContext: r && Ze.expr.match.needsContext.test(r), + namespace: f.join(".") + }, o), (p = c[d]) || ((p = c[d] = []).delegateCount = 0, h.setup && 0 != h.setup.call(t, i, f, a) || t.addEventListener && t.addEventListener(d, a)), h.add && (h.add.call(t, u), u.handler.guid || (u.handler.guid = n.guid)), r ? p.splice(p.delegateCount++, 0, u) : p.push(u), Ze.event.global[d] = 1) + }, + remove: function(t, e, n, i, r) { + var o, a, s, c, l, u, h, p, d, f, m, g = mt.hasData(t) && mt.get(t); + if (g && (c = g.events)) { + for (l = (e = (e || "").match(ct) || [""]).length; l--;) + if (d = m = (s = zt.exec(e[l]) || [])[1], f = (s[2] || "").split(".").sort(), d) { + for (h = Ze.event.special[d] || {}, p = c[d = (i ? h.delegateType : h.bindType) || d] || [], s = s[2] && RegExp("(^|\\.)" + f.join("\\.(?:.*\\.|)") + "(\\.|$)"), a = o = p.length; o--;) u = p[o], !r && m !== u.origType || n && n.guid !== u.guid || s && !s.test(u.namespace) || i && i !== u.selector && ("**" !== i || !u.selector) || (p.splice(o, 1), u.selector && p.delegateCount--, h.remove && h.remove.call(t, u)); + a && !p.length && (h.teardown && 0 != h.teardown.call(t, f, g.handle) || Ze.removeEvent(t, d, g.handle), delete c[d]) + } else + for (d in c) Ze.event.remove(t, d + e[l], n, i, 1); + Ze.isEmptyObject(c) && mt.remove(t, "handle events") + } + }, + dispatch: function(t) { + var e, n, i, r, o, a, s = Ze.event.fix(t), + c = Array(arguments.length), + l = (mt.get(this, "events") || {})[s.type] || [], + u = Ze.event.special[s.type] || {}; + for (c[0] = s, e = 1; e < arguments.length; e++) c[e] = arguments[e]; + if (s.delegateTarget = this, !u.preDispatch || 0 != u.preDispatch.call(this, s)) { + for (a = Ze.event.handlers.call(this, s, l), e = 0; + (r = a[e++]) && !s.isPropagationStopped();) + for (s.currentTarget = r.elem, n = 0; + (o = r.handlers[n++]) && !s.isImmediatePropagationStopped();) s.rnamespace && 0 != o.namespace && !s.rnamespace.test(o.namespace) || (s.handleObj = o, s.data = o.data, void 0 !== (i = ((Ze.event.special[o.origType] || {}).handle || o.handler).apply(r.elem, c)) && 0 == (s.result = i) && (s.preventDefault(), s.stopPropagation())); + return u.postDispatch && u.postDispatch.call(this, s), s.result + } + }, + handlers: function(t, e) { + var n, i, r, o, a, s = [], + c = e.delegateCount, + l = t.target; + if (c && l.nodeType && !("click" === t.type && t.button >= 1)) + for (; l !== this; l = l.parentNode || this) + if (1 === l.nodeType && ("click" !== t.type || 1 != l.disabled)) { + for (o = [], a = {}, n = 0; n < c; n++) void 0 === a[r = (i = e[n]).selector + " "] && (a[r] = i.needsContext ? Ze(r, this).index(l) > -1 : Ze.find(r, this, null, [l]).length), a[r] && o.push(i); + o.length && s.push({ + elem: l, + handlers: o + }) + } + return l = this, c < e.length && s.push({ + elem: l, + handlers: e.slice(c) + }), s + }, + addProp: function(t, e) { + Object.defineProperty(Ze.Event.prototype, t, { + enumerable: 1, + configurable: 1, + get: qe(e) ? function() { + if (this.originalEvent) return e(this.originalEvent) + } : function() { + if (this.originalEvent) return this.originalEvent[t] + }, + set: function(e) { + Object.defineProperty(this, t, { + enumerable: 1, + configurable: 1, + writable: 1, + value: e + }) + } + }) + }, + fix: function(t) { + return t[Ze.expando] ? t : new Ze.Event(t) + }, + special: { + load: { + noBubble: 1 + }, + click: { + setup: function(t) { + var e = this || t; + return Ct.test(e.type) && e.click && o(e, "input") && A(e, "click", w), 0 + }, + trigger: function(t) { + var e = this || t; + return Ct.test(e.type) && e.click && o(e, "input") && A(e, "click"), 1 + }, + _default: function(t) { + var e = t.target; + return Ct.test(e.type) && e.click && o(e, "input") && mt.get(e, "click") || o(e, "a") + } + }, + beforeunload: { + postDispatch: function(t) { + void 0 !== t.result && t.originalEvent && (t.originalEvent.returnValue = t.result) + } + } + } + }, Ze.removeEvent = function(t, e, n) { + t.removeEventListener && t.removeEventListener(e, n) + }, Ze.Event = function(t, e) { + if (!(this instanceof Ze.Event)) return new Ze.Event(t, e); + t && t.type ? (this.originalEvent = t, this.type = t.type, this.isDefaultPrevented = t.defaultPrevented || void 0 === t.defaultPrevented && 0 == t.returnValue ? w : M, this.target = t.target && 3 === t.target.nodeType ? t.target.parentNode : t.target, this.currentTarget = t.currentTarget, this.relatedTarget = t.relatedTarget) : this.type = t, e && Ze.extend(this, e), this.timeStamp = t && t.timeStamp || Date.now(), this[Ze.expando] = 1 + }, Ze.Event.prototype = { + constructor: Ze.Event, + isDefaultPrevented: M, + isPropagationStopped: M, + isImmediatePropagationStopped: M, + isSimulated: 0, + preventDefault: function() { + var t = this.originalEvent; + this.isDefaultPrevented = w, t && !this.isSimulated && t.preventDefault() + }, + stopPropagation: function() { + var t = this.originalEvent; + this.isPropagationStopped = w, t && !this.isSimulated && t.stopPropagation() + }, + stopImmediatePropagation: function() { + var t = this.originalEvent; + this.isImmediatePropagationStopped = w, t && !this.isSimulated && t.stopImmediatePropagation(), this.stopPropagation() + } + }, Ze.each({ + altKey: 1, + bubbles: 1, + cancelable: 1, + changedTouches: 1, + ctrlKey: 1, + detail: 1, + eventPhase: 1, + metaKey: 1, + pageX: 1, + pageY: 1, + shiftKey: 1, + view: 1, + char: 1, + code: 1, + charCode: 1, + key: 1, + keyCode: 1, + button: 1, + buttons: 1, + clientX: 1, + clientY: 1, + offsetX: 1, + offsetY: 1, + pointerId: 1, + pointerType: 1, + screenX: 1, + screenY: 1, + targetTouches: 1, + toElement: 1, + touches: 1, + which: function(t) { + var e = t.button; + return null == t.which && Dt.test(t.type) ? null != t.charCode ? t.charCode : t.keyCode : !t.which && void 0 !== e && It.test(t.type) ? 1 & e ? 1 : 2 & e ? 3 : 4 & e ? 2 : 0 : t.which + } + }, Ze.event.addProp), Ze.each({ + focus: "focusin", + blur: "focusout" + }, function(t, e) { + Ze.event.special[t] = { + setup: function() { + return A(this, t, S), 0 + }, + trigger: function() { + return A(this, t), 1 + }, + delegateType: e + } + }), Ze.each({ + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" + }, function(t, e) { + Ze.event.special[t] = { + delegateType: e, + bindType: e, + handle: function(t) { + var n, i = this, + r = t.relatedTarget, + o = t.handleObj; + return r && (r === i || Ze.contains(i, r)) || (t.type = o.origType, n = o.handler.apply(this, arguments), t.type = e), n + } + } + }), Ze.fn.extend({ + on: function(t, e, n, i) { + return T(this, t, e, n, i) + }, + one: function(t, e, n, i) { + return T(this, t, e, n, i, 1) + }, + off: function(t, e, n) { + var i, r; + if (t && t.preventDefault && t.handleObj) return i = t.handleObj, Ze(t.delegateTarget).off(i.namespace ? i.origType + "." + i.namespace : i.origType, i.selector, i.handler), this; + if ("object" == typeof t) { + for (r in t) this.off(r, e, t[r]); + return this + } + return 0 != e && "function" != typeof e || (n = e, e = void 0), 0 == n && (n = M), this.each(function() { + Ze.event.remove(this, t, n, e) + }) + } + }), Rt = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, Ft = /\s*$/g, Ze.extend({ + htmlPrefilter: function(t) { + return t.replace(Rt, "<$1>") + }, + clone: function(t, e, n) { + var i, r, o, a, s = t.cloneNode(1), + c = Mt(t); + if (!(He.noCloneChecked || 1 !== t.nodeType && 11 !== t.nodeType || Ze.isXMLDoc(t))) + for (a = x(s), i = 0, r = (o = x(t)).length; i < r; i++) N(o[i], a[i]); + if (e) + if (n) + for (o = o || x(t), a = a || x(s), i = 0, r = o.length; i < r; i++) E(o[i], a[i]); + else E(t, s); + return (a = x(s, "script")).length > 0 && b(a, !c && x(t, "script")), s + }, + cleanData: function(t) { + for (var e, n, i, r = Ze.event.special, o = 0; void 0 !== (n = t[o]); o++) + if (ft(n)) { + if (e = n[mt.expando]) { + if (e.events) + for (i in e.events) r[i] ? Ze.event.remove(n, i) : Ze.removeEvent(n, i, e.handle); + n[mt.expando] = void 0 + } + n[gt.expando] && (n[gt.expando] = void 0) + } + } + }), Ze.fn.extend({ + detach: function(t) { + return D(this, t, 1) + }, + remove: function(t) { + return D(this, t) + }, + text: function(t) { + return ht(this, function(t) { + return void 0 === t ? Ze.text(this) : this.empty().each(function() { + 1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = t) + }) + }, null, t, arguments.length) + }, + append: function() { + return O(this, arguments, function(t) { + 1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || L(this, t).appendChild(t) + }) + }, + prepend: function() { + return O(this, arguments, function(t) { + if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { + var e = L(this, t); + e.insertBefore(t, e.firstChild) + } + }) + }, + before: function() { + return O(this, arguments, function(t) { + this.parentNode && this.parentNode.insertBefore(t, this) + }) + }, + after: function() { + return O(this, arguments, function(t) { + this.parentNode && this.parentNode.insertBefore(t, this.nextSibling) + }) + }, + empty: function() { + for (var t, e = 0; null != (t = this[e]); e++) 1 === t.nodeType && (Ze.cleanData(x(t, 0)), t.textContent = ""); + return this + }, + clone: function(t, e) { + return t = null == t ? 0 : t, e = null == e ? t : e, this.map(function() { + return Ze.clone(this, t, e) + }) + }, + html: function(t) { + return ht(this, function(t) { + var e = this[0] || {}, + n = 0, + i = this.length; + if (void 0 === t && 1 === e.nodeType) return e.innerHTML; + if ("string" == typeof t && !Ft.test(t) && !Nt[(Pt.exec(t) || ["", ""])[1].toLowerCase()]) { + t = Ze.htmlPrefilter(t); + try { + for (; n < i; n++) 1 === (e = this[n] || {}).nodeType && (Ze.cleanData(x(e, 0)), e.innerHTML = t); + e = 0 + } catch (t) {} + } + e && this.empty().append(t) + }, null, t, arguments.length) + }, + replaceWith: function() { + var t = []; + return O(this, arguments, function(e) { + var n = this.parentNode; + Ze.inArray(this, t) < 0 && (Ze.cleanData(x(this)), n && n.replaceChild(e, this)) + }, t) + } + }), Ze.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" + }, function(t, e) { + Ze.fn[t] = function(t) { + for (var n, i = [], r = Ze(t), o = r.length - 1, a = 0; a <= o; a++) n = a === o ? this : this.clone(1), Ze(r[a])[e](n), ke.apply(i, n.get()); + return this.pushStack(i) + } + }), Ut = RegExp("^(" + xt + ")(?!px)[a-z%]+$", "i"), jt = function(e) { + var n = e.ownerDocument.defaultView; + return n && n.opener || (n = t), n.getComputedStyle(e) + }, Vt = RegExp(_t.join("|"), "i"), + function() { + function e() { + if (l) { + c.style.cssText = "position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0", l.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%", wt.appendChild(c).appendChild(l); + var e = t.getComputedStyle(l); + i = "1%" !== e.top, s = 12 === n(e.marginLeft), l.style.right = "60%", a = 36 === n(e.right), r = 36 === n(e.width), l.style.position = "absolute", o = 12 === n(l.offsetWidth / 3), wt.removeChild(c), l = null + } + } + + function n(t) { + return Math.round(parseFloat(t)) + } + var i, r, o, a, s, c = Ie.createElement("div"), + l = Ie.createElement("div"); + l.style && (l.style.backgroundClip = "content-box", l.cloneNode(1).style.backgroundClip = "", He.clearCloneStyle = "content-box" === l.style.backgroundClip, Ze.extend(He, { + boxSizingReliable: function() { + return e(), r + }, + pixelBoxStyles: function() { + return e(), a + }, + pixelPosition: function() { + return e(), i + }, + reliableMarginLeft: function() { + return e(), s + }, + scrollboxSize: function() { + return e(), o + } + })) + }(), Gt = ["Webkit", "Moz", "ms"], Wt = Ie.createElement("div").style, Ht = {}, qt = /^(none|table(?!-c[ea]).+)/, Xt = /^--/, Yt = { + position: "absolute", + visibility: "hidden", + display: "block" + }, Zt = { + letterSpacing: "0", + fontWeight: "400" + }, Ze.extend({ + cssHooks: { + opacity: { + get: function(t, e) { + if (e) { + var n = I(t, "opacity"); + return "" === n ? "1" : n + } + } + } + }, + cssNumber: { + animationIterationCount: 1, + columnCount: 1, + fillOpacity: 1, + flexGrow: 1, + flexShrink: 1, + fontWeight: 1, + gridArea: 1, + gridColumn: 1, + gridColumnEnd: 1, + gridColumnStart: 1, + gridRow: 1, + gridRowEnd: 1, + gridRowStart: 1, + lineHeight: 1, + opacity: 1, + order: 1, + orphans: 1, + widows: 1, + zIndex: 1, + zoom: 1 + }, + cssProps: {}, + style: function(t, e, n, i) { + if (t && 3 !== t.nodeType && 8 !== t.nodeType && t.style) { + var r, o, a, s = d(e), + c = Xt.test(e), + l = t.style; + if (c || (e = R(s)), a = Ze.cssHooks[e] || Ze.cssHooks[s], void 0 === n) return a && "get" in a && void 0 !== (r = a.get(t, 0, i)) ? r : l[e]; + "string" == (o = typeof n) && (r = bt.exec(n)) && r[1] && (n = g(t, e, r), o = "number"), null != n && n == n && ("number" !== o || c || (n += r && r[3] || (Ze.cssNumber[s] ? "" : "px")), He.clearCloneStyle || "" !== n || 0 !== e.indexOf("background") || (l[e] = "inherit"), a && "set" in a && void 0 === (n = a.set(t, n, i)) || (c ? l.setProperty(e, n) : l[e] = n)) + } + }, + css: function(t, e, n, i) { + var r, o, a, s = d(e); + return Xt.test(e) || (e = R(s)), (a = Ze.cssHooks[e] || Ze.cssHooks[s]) && "get" in a && (r = a.get(t, 1, n)), void 0 === r && (r = I(t, e, i)), "normal" === r && e in Zt && (r = Zt[e]), "" === n || n ? (o = parseFloat(r), 1 == n || isFinite(o) ? o || 0 : r) : r + } + }), Ze.each(["height", "width"], function(t, e) { + Ze.cssHooks[e] = { + get: function(t, n, i) { + if (n) return !qt.test(Ze.css(t, "display")) || t.getClientRects().length && t.getBoundingClientRect().width ? B(t, e, i) : At(t, Yt, function() { + return B(t, e, i) + }) + }, + set: function(t, n, i) { + var r, o = jt(t), + a = !He.scrollboxSize() && "absolute" === o.position, + s = (a || i) && "border-box" === Ze.css(t, "boxSizing", 0, o), + c = i ? k(t, e, i, s, o) : 0; + return s && a && (c -= Math.ceil(t["offset" + e[0].toUpperCase() + e.slice(1)] - parseFloat(o[e]) - k(t, e, "border", 0, o) - .5)), c && (r = bt.exec(n)) && "px" !== (r[3] || "px") && (t.style[e] = n, n = Ze.css(t, e)), F(0, n, c) + } + } + }), Ze.cssHooks.marginLeft = z(He.reliableMarginLeft, function(t, e) { + if (e) return (parseFloat(I(t, "marginLeft")) || t.getBoundingClientRect().left - At(t, { + marginLeft: 0 + }, function() { + return t.getBoundingClientRect().left + })) + "px" + }), Ze.each({ + margin: "", + padding: "", + border: "Width" + }, function(t, e) { + Ze.cssHooks[t + e] = { + expand: function(n) { + for (var i = 0, r = {}, o = "string" == typeof n ? n.split(" ") : [n]; i < 4; i++) r[t + _t[i] + e] = o[i] || o[i - 2] || o[0]; + return r + } + }, "margin" !== t && (Ze.cssHooks[t + e].set = F) + }), Ze.fn.extend({ + css: function(t, e) { + return ht(this, function(t, e, n) { + var i, r, o = {}, + a = 0; + if (Array.isArray(e)) { + for (i = jt(t), r = e.length; a < r; a++) o[e[a]] = Ze.css(t, e[a], 0, i); + return o + } + return void 0 !== n ? Ze.style(t, e, n) : Ze.css(t, e) + }, t, e, arguments.length > 1) + } + }), Ze.Tween = U, U.prototype = { + constructor: U, + init: function(t, e, n, i, r, o) { + this.elem = t, this.prop = n, this.easing = r || Ze.easing._default, this.options = e, this.start = this.now = this.cur(), this.end = i, this.unit = o || (Ze.cssNumber[n] ? "" : "px") + }, + cur: function() { + var t = U.propHooks[this.prop]; + return t && t.get ? t.get(this) : U.propHooks._default.get(this) + }, + run: function(t) { + var e, n = U.propHooks[this.prop]; + return this.options.duration ? this.pos = e = Ze.easing[this.easing](t, this.options.duration * t, 0, 1, this.options.duration) : this.pos = e = t, this.now = (this.end - this.start) * e + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), n && n.set ? n.set(this) : U.propHooks._default.set(this), this + } + }, U.prototype.init.prototype = U.prototype, U.propHooks = { + _default: { + get: function(t) { + var e; + return 1 !== t.elem.nodeType || null != t.elem[t.prop] && null == t.elem.style[t.prop] ? t.elem[t.prop] : (e = Ze.css(t.elem, t.prop, "")) && "auto" !== e ? e : 0 + }, + set: function(t) { + Ze.fx.step[t.prop] ? Ze.fx.step[t.prop](t) : 1 !== t.elem.nodeType || !Ze.cssHooks[t.prop] && null == t.elem.style[R(t.prop)] ? t.elem[t.prop] = t.now : Ze.style(t.elem, t.prop, t.now + t.unit) + } + } + }, U.propHooks.scrollTop = U.propHooks.scrollLeft = { + set: function(t) { + t.elem.nodeType && t.elem.parentNode && (t.elem[t.prop] = t.now) + } + }, Ze.easing = { + linear: function(t) { + return t + }, + swing: function(t) { + return .5 - Math.cos(t * Math.PI) / 2 + }, + _default: "swing" + }, Ze.fx = U.prototype.init, Ze.fx.step = {}, Qt = /^(?:toggle|show|hide)$/, Kt = /queueHooks$/, Ze.Animation = Ze.extend(H, { + tweeners: { + "*": [function(t, e) { + var n = this.createTween(t, e); + return g(n.elem, t, bt.exec(e), n), n + }] + }, + tweener: function(t, e) { + qe(t) ? (e = t, t = ["*"]) : t = t.match(ct); + for (var n, i = 0, r = t.length; i < r; i++) n = t[i], H.tweeners[n] = H.tweeners[n] || [], H.tweeners[n].unshift(e) + }, + prefilters: [function(t, e, n) { + var i, r, o, a, s, c, l, u, h = "width" in e || "height" in e, + p = this, + d = {}, + f = t.style, + m = t.nodeType && Tt(t), + g = mt.get(t, "fxshow"); + for (i in n.queue || (null == (a = Ze._queueHooks(t, "fx")).unqueued && (a.unqueued = 0, s = a.empty.fire, a.empty.fire = function() { + a.unqueued || s() + }), a.unqueued++, p.always(function() { + p.always(function() { + a.unqueued--, Ze.queue(t, "fx").length || a.empty.fire() + }) + })), e) + if (r = e[i], Qt.test(r)) { + if (delete e[i], o = o || "toggle" === r, r === (m ? "hide" : "show")) { + if ("show" !== r || !g || void 0 === g[i]) continue; + m = 1 + } + d[i] = g && g[i] || Ze.style(t, i) + } + if ((c = !Ze.isEmptyObject(e)) || !Ze.isEmptyObject(d)) + for (i in h && 1 === t.nodeType && (n.overflow = [f.overflow, f.overflowX, f.overflowY], null == (l = g && g.display) && (l = mt.get(t, "display")), "none" === (u = Ze.css(t, "display")) && (l ? u = l : (y([t], 1), l = t.style.display || l, u = Ze.css(t, "display"), y([t]))), ("inline" === u || "inline-block" === u && null != l) && "none" === Ze.css(t, "float") && (c || (p.done(function() { + f.display = l + }), null == l && (u = f.display, l = "none" === u ? "" : u)), f.display = "inline-block")), n.overflow && (f.overflow = "hidden", p.always(function() { + f.overflow = n.overflow[0], f.overflowX = n.overflow[1], f.overflowY = n.overflow[2] + })), c = 0, d) c || (g ? "hidden" in g && (m = g.hidden) : g = mt.access(t, "fxshow", { + display: l + }), o && (g.hidden = !m), m && y([t], 1), p.done(function() { + for (i in m || y([t]), mt.remove(t, "fxshow"), d) Ze.style(t, i, d[i]) + })), c = W(m ? g[i] : 0, i, p), i in g || (g[i] = c.start, m && (c.end = c.start, c.start = 0)) + }], + prefilter: function(t, e) { + e ? H.prefilters.unshift(t) : H.prefilters.push(t) + } + }), Ze.speed = function(t, e, n) { + var i = t && "object" == typeof t ? Ze.extend({}, t) : { + complete: n || !n && e || qe(t) && t, + duration: t, + easing: n && e || e && !qe(e) && e + }; + return Ze.fx.off ? i.duration = 0 : "number" != typeof i.duration && (i.duration in Ze.fx.speeds ? i.duration = Ze.fx.speeds[i.duration] : i.duration = Ze.fx.speeds._default), null != i.queue && 1 != i.queue || (i.queue = "fx"), i.old = i.complete, i.complete = function() { + qe(i.old) && i.old.call(this), i.queue && Ze.dequeue(this, i.queue) + }, i + }, Ze.fn.extend({ + fadeTo: function(t, e, n, i) { + return this.filter(Tt).css("opacity", 0).show().end().animate({ + opacity: e + }, t, n, i) + }, + animate: function(t, e, n, i) { + var r = Ze.isEmptyObject(t), + o = Ze.speed(e, n, i), + a = function() { + var e = H(this, Ze.extend({}, t), o); + (r || mt.get(this, "finish")) && e.stop(1) + }; + return a.finish = a, r || 0 == o.queue ? this.each(a) : this.queue(o.queue, a) + }, + stop: function(t, e, n) { + var i = function(t) { + var e = t.stop; + delete t.stop, e(n) + }; + return "string" != typeof t && (n = e, e = t, t = void 0), e && 0 != t && this.queue(t || "fx", []), this.each(function() { + var e = 1, + r = null != t && t + "queueHooks", + o = Ze.timers, + a = mt.get(this); + if (r) a[r] && a[r].stop && i(a[r]); + else + for (r in a) a[r] && a[r].stop && Kt.test(r) && i(a[r]); + for (r = o.length; r--;) o[r].elem !== this || null != t && o[r].queue !== t || (o[r].anim.stop(n), e = 0, o.splice(r, 1)); + !e && n || Ze.dequeue(this, t) + }) + }, + finish: function(t) { + return 0 != t && (t = t || "fx"), this.each(function() { + var e, n = mt.get(this), + i = n[t + "queue"], + r = n[t + "queueHooks"], + o = Ze.timers, + a = i ? i.length : 0; + for (n.finish = 1, Ze.queue(this, t, []), r && r.stop && r.stop.call(this, 1), e = o.length; e--;) o[e].elem === this && o[e].queue === t && (o[e].anim.stop(1), o.splice(e, 1)); + for (e = 0; e < a; e++) i[e] && i[e].finish && i[e].finish.call(this); + delete n.finish + }) + } + }), Ze.each(["toggle", "show", "hide"], function(t, e) { + var n = Ze.fn[e]; + Ze.fn[e] = function(t, i, r) { + return null == t || "boolean" == typeof t ? n.apply(this, arguments) : this.animate(G(e, 1), t, i, r) + } + }), Ze.each({ + slideDown: G("show"), + slideUp: G("hide"), + slideToggle: G("toggle"), + fadeIn: { + opacity: "show" + }, + fadeOut: { + opacity: "hide" + }, + fadeToggle: { + opacity: "toggle" + } + }, function(t, e) { + Ze.fn[t] = function(t, n, i) { + return this.animate(e, t, n, i) + } + }), Ze.timers = [], Ze.fx.tick = function() { + var t, e = 0, + n = Ze.timers; + for (Jt = Date.now(); e < n.length; e++)(t = n[e])() || n[e] !== t || n.splice(e--, 1); + n.length || Ze.fx.stop(), Jt = void 0 + }, Ze.fx.timer = function(t) { + Ze.timers.push(t), Ze.fx.start() + }, Ze.fx.interval = 13, Ze.fx.start = function() { + $t || ($t = 1, j()) + }, Ze.fx.stop = function() { + $t = null + }, Ze.fx.speeds = { + slow: 600, + fast: 200, + _default: 400 + }, Ze.fn.delay = function(e, n) { + return e = Ze.fx && Ze.fx.speeds[e] || e, n = n || "fx", this.queue(n, function(n, i) { + var r = t.setTimeout(n, e); + i.stop = function() { + t.clearTimeout(r) + } + }) + }, + function() { + var t = Ie.createElement("input"), + e = Ie.createElement("select").appendChild(Ie.createElement("option")); + t.type = "checkbox", He.checkOn = "" !== t.value, He.optSelected = e.selected, (t = Ie.createElement("input")).value = "t", t.type = "radio", He.radioValue = "t" === t.value + }(), ee = Ze.expr.attrHandle, Ze.fn.extend({ + attr: function(t, e) { + return ht(this, Ze.attr, t, e, arguments.length > 1) + }, + removeAttr: function(t) { + return this.each(function() { + Ze.removeAttr(this, t) + }) + } + }), Ze.extend({ + attr: function(t, e, n) { + var i, r, o = t.nodeType; + if (3 !== o && 8 !== o && 2 !== o) return void 0 === t.getAttribute ? Ze.prop(t, e, n) : (1 === o && Ze.isXMLDoc(t) || (r = Ze.attrHooks[e.toLowerCase()] || (Ze.expr.match.bool.test(e) ? te : void 0)), void 0 !== n ? null === n ? void Ze.removeAttr(t, e) : r && "set" in r && void 0 !== (i = r.set(t, n, e)) ? i : (t.setAttribute(e, n + ""), n) : r && "get" in r && null !== (i = r.get(t, e)) ? i : null == (i = Ze.find.attr(t, e)) ? void 0 : i) + }, + attrHooks: { + type: { + set: function(t, e) { + if (!He.radioValue && "radio" === e && o(t, "input")) { + var n = t.value; + return t.setAttribute("type", e), n && (t.value = n), e + } + } + } + }, + removeAttr: function(t, e) { + var n, i = 0, + r = e && e.match(ct); + if (r && 1 === t.nodeType) + for (; n = r[i++];) t.removeAttribute(n) + } + }), te = { + set: function(t, e, n) { + return 0 == e ? Ze.removeAttr(t, n) : t.setAttribute(n, n), n + } + }, Ze.each(Ze.expr.match.bool.source.match(/\w+/g), function(t, e) { + var n = ee[e] || Ze.find.attr; + ee[e] = function(t, e, i) { + var r, o, a = e.toLowerCase(); + return i || (o = ee[a], ee[a] = r, r = null != n(t, e, i) ? a : null, ee[a] = o), r + } + }), ne = /^(?:input|select|textarea|button)$/i, ie = /^(?:a|area)$/i, Ze.fn.extend({ + prop: function(t, e) { + return ht(this, Ze.prop, t, e, arguments.length > 1) + }, + removeProp: function(t) { + return this.each(function() { + delete this[Ze.propFix[t] || t] + }) + } + }), Ze.extend({ + prop: function(t, e, n) { + var i, r, o = t.nodeType; + if (3 !== o && 8 !== o && 2 !== o) return 1 === o && Ze.isXMLDoc(t) || (e = Ze.propFix[e] || e, r = Ze.propHooks[e]), void 0 !== n ? r && "set" in r && void 0 !== (i = r.set(t, n, e)) ? i : t[e] = n : r && "get" in r && null !== (i = r.get(t, e)) ? i : t[e] + }, + propHooks: { + tabIndex: { + get: function(t) { + var e = Ze.find.attr(t, "tabindex"); + return e ? parseInt(e, 10) : ne.test(t.nodeName) || ie.test(t.nodeName) && t.href ? 0 : -1 + } + } + }, + propFix: { + for: "htmlFor", + class: "className" + } + }), He.optSelected || (Ze.propHooks.selected = { + get: function(t) { + var e = t.parentNode; + return e && e.parentNode && e.parentNode.selectedIndex, null + }, + set: function(t) { + var e = t.parentNode; + e && (e.selectedIndex, e.parentNode && e.parentNode.selectedIndex) + } + }), Ze.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function() { + Ze.propFix[this.toLowerCase()] = this + }), Ze.fn.extend({ + addClass: function(t) { + var e, n, i, r, o, a, s, c = 0; + if (qe(t)) return this.each(function(e) { + Ze(this).addClass(t.call(this, e, X(this))) + }); + if ((e = Y(t)).length) + for (; n = this[c++];) + if (r = X(n), i = 1 === n.nodeType && " " + q(r) + " ") { + for (a = 0; o = e[a++];) i.indexOf(" " + o + " ") < 0 && (i += o + " "); + r !== (s = q(i)) && n.setAttribute("class", s) + } + return this + }, + removeClass: function(t) { + var e, n, i, r, o, a, s, c = 0; + if (qe(t)) return this.each(function(e) { + Ze(this).removeClass(t.call(this, e, X(this))) + }); + if (!arguments.length) return this.attr("class", ""); + if ((e = Y(t)).length) + for (; n = this[c++];) + if (r = X(n), i = 1 === n.nodeType && " " + q(r) + " ") { + for (a = 0; o = e[a++];) + for (; i.indexOf(" " + o + " ") > -1;) i = i.replace(" " + o + " ", " "); + r !== (s = q(i)) && n.setAttribute("class", s) + } + return this + }, + toggleClass: function(t, e) { + var n = typeof t, + i = "string" === n || Array.isArray(t); + return "boolean" == typeof e && i ? e ? this.addClass(t) : this.removeClass(t) : qe(t) ? this.each(function(n) { + Ze(this).toggleClass(t.call(this, n, X(this), e), e) + }) : this.each(function() { + var e, r, o, a; + if (i) + for (r = 0, o = Ze(this), a = Y(t); e = a[r++];) o.hasClass(e) ? o.removeClass(e) : o.addClass(e); + else void 0 !== t && "boolean" !== n || ((e = X(this)) && mt.set(this, "__className__", e), this.setAttribute && this.setAttribute("class", e || 0 == t ? "" : mt.get(this, "__className__") || "")) + }) + }, + hasClass: function(t) { + var e, n, i = 0; + for (e = " " + t + " "; n = this[i++];) + if (1 === n.nodeType && (" " + q(X(n)) + " ").indexOf(e) > -1) return 1; + return 0 + } + }), re = /\r/g, Ze.fn.extend({ + val: function(t) { + var e, n, i, r = this[0]; + return arguments.length ? (i = qe(t), this.each(function(n) { + var r; + 1 === this.nodeType && (null == (r = i ? t.call(this, n, Ze(this).val()) : t) ? r = "" : "number" == typeof r ? r += "" : Array.isArray(r) && (r = Ze.map(r, function(t) { + return null == t ? "" : t + "" + })), (e = Ze.valHooks[this.type] || Ze.valHooks[this.nodeName.toLowerCase()]) && "set" in e && void 0 !== e.set(this, r, "value") || (this.value = r)) + })) : r ? (e = Ze.valHooks[r.type] || Ze.valHooks[r.nodeName.toLowerCase()]) && "get" in e && void 0 !== (n = e.get(r, "value")) ? n : "string" == typeof(n = r.value) ? n.replace(re, "") : null == n ? "" : n : void 0 + } + }), Ze.extend({ + valHooks: { + option: { + get: function(t) { + var e = Ze.find.attr(t, "value"); + return null != e ? e : q(Ze.text(t)) + } + }, + select: { + get: function(t) { + var e, n, i, r = t.options, + a = t.selectedIndex, + s = "select-one" === t.type, + c = s ? null : [], + l = s ? a + 1 : r.length; + for (i = a < 0 ? l : s ? a : 0; i < l; i++) + if (((n = r[i]).selected || i === a) && !n.disabled && (!n.parentNode.disabled || !o(n.parentNode, "optgroup"))) { + if (e = Ze(n).val(), s) return e; + c.push(e) + } + return c + }, + set: function(t, e) { + for (var n, i, r = t.options, o = Ze.makeArray(e), a = r.length; a--;)((i = r[a]).selected = Ze.inArray(Ze.valHooks.option.get(i), o) > -1) && (n = 1); + return n || (t.selectedIndex = -1), o + } + } + } + }), Ze.each(["radio", "checkbox"], function() { + Ze.valHooks[this] = { + set: function(t, e) { + if (Array.isArray(e)) return t.checked = Ze.inArray(Ze(t).val(), e) > -1 + } + }, He.checkOn || (Ze.valHooks[this].get = function(t) { + return null === t.getAttribute("value") ? "on" : t.value + }) + }), He.focusin = "onfocusin" in t, oe = /^(?:focusinfocus|focusoutblur)$/, ae = function(t) { + t.stopPropagation() + }, Ze.extend(Ze.event, { + trigger: function(e, n, i, r) { + var o, a, s, c, l, u, h, p, d = [i || Ie], + f = Ve.call(e, "type") ? e.type : e, + m = Ve.call(e, "namespace") ? e.namespace.split(".") : []; + if (a = p = s = i = i || Ie, 3 !== i.nodeType && 8 !== i.nodeType && !oe.test(f + Ze.event.triggered) && (f.indexOf(".") > -1 && (m = f.split("."), f = m.shift(), m.sort()), l = f.indexOf(":") < 0 && "on" + f, (e = e[Ze.expando] ? e : new Ze.Event(f, "object" == typeof e && e)).isTrigger = r ? 2 : 3, e.namespace = m.join("."), e.rnamespace = e.namespace ? RegExp("(^|\\.)" + m.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, e.result = void 0, e.target || (e.target = i), n = null == n ? [e] : Ze.makeArray(n, [e]), h = Ze.event.special[f] || {}, r || !h.trigger || 0 != h.trigger.apply(i, n))) { + if (!r && !h.noBubble && !Xe(i)) { + for (c = h.delegateType || f, oe.test(c + f) || (a = a.parentNode); a; a = a.parentNode) d.push(a), s = a; + s === (i.ownerDocument || Ie) && d.push(s.defaultView || s.parentWindow || t) + } + for (o = 0; + (a = d[o++]) && !e.isPropagationStopped();) p = a, e.type = o > 1 ? c : h.bindType || f, (u = (mt.get(a, "events") || {})[e.type] && mt.get(a, "handle")) && u.apply(a, n), (u = l && a[l]) && u.apply && ft(a) && (e.result = u.apply(a, n), 0 == e.result && e.preventDefault()); + return e.type = f, r || e.isDefaultPrevented() || h._default && 0 != h._default.apply(d.pop(), n) || !ft(i) || l && qe(i[f]) && !Xe(i) && ((s = i[l]) && (i[l] = null), Ze.event.triggered = f, e.isPropagationStopped() && p.addEventListener(f, ae), i[f](), e.isPropagationStopped() && p.removeEventListener(f, ae), Ze.event.triggered = void 0, s && (i[l] = s)), e.result + } + }, + simulate: function(t, e, n) { + var i = Ze.extend(new Ze.Event, n, { + type: t, + isSimulated: 1 + }); + Ze.event.trigger(i, null, e) + } + }), Ze.fn.extend({ + trigger: function(t, e) { + return this.each(function() { + Ze.event.trigger(t, e, this) + }) + }, + triggerHandler: function(t, e) { + var n = this[0]; + if (n) return Ze.event.trigger(t, e, n, 1) + } + }), He.focusin || Ze.each({ + focus: "focusin", + blur: "focusout" + }, function(t, e) { + var n = function(t) { + Ze.event.simulate(e, t.target, Ze.event.fix(t)) + }; + Ze.event.special[e] = { + setup: function() { + var i = this.ownerDocument || this, + r = mt.access(i, e); + r || i.addEventListener(t, n, 1), mt.access(i, e, (r || 0) + 1) + }, + teardown: function() { + var i = this.ownerDocument || this, + r = mt.access(i, e) - 1; + r ? mt.access(i, e, r) : (i.removeEventListener(t, n, 1), mt.remove(i, e)) + } + } + }), se = t.location, ce = Date.now(), le = /\?/, Ze.parseXML = function(e) { + var n; + if (!e || "string" != typeof e) return null; + try { + n = (new t.DOMParser).parseFromString(e, "text/xml") + } catch (t) { + n = void 0 + } + return n && !n.getElementsByTagName("parsererror").length || Ze.error("Invalid XML: " + e), n + }, ue = /\[\]$/, he = /\r?\n/g, pe = /^(?:submit|button|image|reset|file)$/i, de = /^(?:input|select|textarea|keygen)/i, Ze.param = function(t, e) { + var n, i = [], + r = function(t, e) { + var n = qe(e) ? e() : e; + i[i.length] = encodeURIComponent(t) + "=" + encodeURIComponent(null == n ? "" : n) + }; + if (null == t) return ""; + if (Array.isArray(t) || t.jquery && !Ze.isPlainObject(t)) Ze.each(t, function() { + r(this.name, this.value) + }); + else + for (n in t) Z(n, t[n], e, r); + return i.join("&") + }, Ze.fn.extend({ + serialize: function() { + return Ze.param(this.serializeArray()) + }, + serializeArray: function() { + return this.map(function() { + var t = Ze.prop(this, "elements"); + return t ? Ze.makeArray(t) : this + }).filter(function() { + var t = this.type; + return this.name && !Ze(this).is(":disabled") && de.test(this.nodeName) && !pe.test(t) && (this.checked || !Ct.test(t)) + }).map(function(t, e) { + var n = Ze(this).val(); + return null == n ? null : Array.isArray(n) ? Ze.map(n, function(t) { + return { + name: e.name, + value: t.replace(he, "\r\n") + } + }) : { + name: e.name, + value: n.replace(he, "\r\n") + } + }).get() + } + }), fe = /%20/g, me = /#.*$/, ge = /([?&])_=[^&]*/, ve = /^(.*?):[ \t]*([^\r\n]*)$/gm, ye = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, xe = /^(?:GET|HEAD)$/, be = /^\/\//, _e = {}, we = {}, "*/*", (Me = Ie.createElement("a")).href = se.href, Ze.extend({ + active: 0, + lastModified: {}, + etag: {}, + ajaxSettings: { + url: se.href, + type: "GET", + isLocal: ye.test(se.protocol), + global: 1, + processData: 1, + async: 1, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + accepts: { + "*": "*/*", + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + converters: { + "* text": String, + "text html": 1, + "text json": JSON.parse, + "text xml": Ze.parseXML + }, + flatOptions: { + url: 1, + context: 1 + } + }, + ajaxSetup: function(t, e) { + return e ? Q(Q(t, Ze.ajaxSettings), e) : Q(Ze.ajaxSettings, t) + }, + ajaxPrefilter: J(_e), + ajaxTransport: J(we), + ajax: function(e, n) { + function i(e, n, i, s) { + var l, p, d, b, _, w = n; + u || (u = 1, c && t.clearTimeout(c), r = void 0, a = s || "", M.readyState = e > 0 ? 4 : 0, l = e >= 200 && e < 300 || 304 === e, i && (b = function(t, e, n) { + for (var i, r, o, a, s = t.contents, c = t.dataTypes; + "*" === c[0];) c.shift(), void 0 === i && (i = t.mimeType || e.getResponseHeader("Content-Type")); + if (i) + for (r in s) + if (s[r] && s[r].test(i)) { + c.unshift(r); + break + } + if (c[0] in n) o = c[0]; + else { + for (r in n) { + if (!c[0] || t.converters[r + " " + c[0]]) { + o = r; + break + } + a || (a = r) + } + o = o || a + } + if (o) return o !== c[0] && c.unshift(o), n[o] + }(f, M, i)), b = function(t, e, n, i) { + var r, o, a, s, c, l = {}, + u = t.dataTypes.slice(); + if (u[1]) + for (a in t.converters) l[a.toLowerCase()] = t.converters[a]; + for (o = u.shift(); o;) + if (t.responseFields[o] && (n[t.responseFields[o]] = e), !c && i && t.dataFilter && (e = t.dataFilter(e, t.dataType)), c = o, o = u.shift()) + if ("*" === o) o = c; + else if ("*" !== c && c !== o) { + if (!(a = l[c + " " + o] || l["* " + o])) + for (r in l) + if ((s = r.split(" "))[1] === o && (a = l[c + " " + s[0]] || l["* " + s[0]])) { + 1 == a ? a = l[r] : 1 != l[r] && (o = s[0], u.unshift(s[1])); + break + } + if (1 != a) + if (a && t.throws) e = a(e); + else try { + e = a(e) + } catch (t) { + return { + state: "parsererror", + error: a ? t : "No conversion from " + c + " to " + o + } + } + } + return { + state: "success", + data: e + } + }(f, b, M, l), l ? (f.ifModified && ((_ = M.getResponseHeader("Last-Modified")) && (Ze.lastModified[o] = _), (_ = M.getResponseHeader("etag")) && (Ze.etag[o] = _)), 204 === e || "HEAD" === f.type ? w = "nocontent" : 304 === e ? w = "notmodified" : (w = b.state, p = b.data, l = !(d = b.error))) : (d = w, !e && w || (w = "error", e < 0 && (e = 0))), M.status = e, M.statusText = (n || w) + "", l ? v.resolveWith(m, [p, w, M]) : v.rejectWith(m, [M, w, d]), M.statusCode(x), x = void 0, h && g.trigger(l ? "ajaxSuccess" : "ajaxError", [M, f, l ? p : d]), y.fireWith(m, [M, w]), h && (g.trigger("ajaxComplete", [M, f]), --Ze.active || Ze.event.trigger("ajaxStop"))) + } + "object" == typeof e && (n = e, e = void 0), n = n || {}; + var r, o, a, s, c, l, u, h, p, d, f = Ze.ajaxSetup({}, n), + m = f.context || f, + g = f.context && (m.nodeType || m.jquery) ? Ze(m) : Ze.event, + v = Ze.Deferred(), + y = Ze.Callbacks("once memory"), + x = f.statusCode || {}, + b = {}, + _ = {}, + w = "canceled", + M = { + readyState: 0, + getResponseHeader: function(t) { + var e; + if (u) { + if (!s) + for (s = {}; e = ve.exec(a);) s[e[1].toLowerCase() + " "] = (s[e[1].toLowerCase() + " "] || []).concat(e[2]); + e = s[t.toLowerCase() + " "] + } + return null == e ? null : e.join(", ") + }, + getAllResponseHeaders: function() { + return u ? a : null + }, + setRequestHeader: function(t, e) { + return null == u && (t = _[t.toLowerCase()] = _[t.toLowerCase()] || t, b[t] = e), this + }, + overrideMimeType: function(t) { + return null == u && (f.mimeType = t), this + }, + statusCode: function(t) { + var e; + if (t) + if (u) M.always(t[M.status]); + else + for (e in t) x[e] = [x[e], t[e]]; + return this + }, + abort: function(t) { + var e = t || w; + return r && r.abort(e), i(0, e), this + } + }; + if (v.promise(M), f.url = ((e || f.url || se.href) + "").replace(be, se.protocol + "//"), f.type = n.method || n.type || f.method || f.type, f.dataTypes = (f.dataType || "*").toLowerCase().match(ct) || [""], null == f.crossDomain) { + l = Ie.createElement("a"); + try { + l.href = f.url, l.href = l.href, f.crossDomain = Me.protocol + "//" + Me.host != l.protocol + "//" + l.host + } catch (t) { + f.crossDomain = 1 + } + } + if (f.data && f.processData && "string" != typeof f.data && (f.data = Ze.param(f.data, f.traditional)), $(_e, f, n, M), u) return M; + for (p in (h = Ze.event && f.global) && 0 == Ze.active++ && Ze.event.trigger("ajaxStart"), f.type = f.type.toUpperCase(), f.hasContent = !xe.test(f.type), o = f.url.replace(me, ""), f.hasContent ? f.data && f.processData && 0 === (f.contentType || "").indexOf("application/x-www-form-urlencoded") && (f.data = f.data.replace(fe, "+")) : (d = f.url.slice(o.length), f.data && (f.processData || "string" == typeof f.data) && (o += (le.test(o) ? "&" : "?") + f.data, delete f.data), 0 == f.cache && (o = o.replace(ge, "$1"), d = (le.test(o) ? "&" : "?") + "_=" + ce++ + d), f.url = o + d), f.ifModified && (Ze.lastModified[o] && M.setRequestHeader("If-Modified-Since", Ze.lastModified[o]), Ze.etag[o] && M.setRequestHeader("If-None-Match", Ze.etag[o])), (f.data && f.hasContent && 0 != f.contentType || n.contentType) && M.setRequestHeader("Content-Type", f.contentType), M.setRequestHeader("Accept", f.dataTypes[0] && f.accepts[f.dataTypes[0]] ? f.accepts[f.dataTypes[0]] + ("*" !== f.dataTypes[0] ? ", */*; q=0.01" : "") : f.accepts["*"]), f.headers) M.setRequestHeader(p, f.headers[p]); + if (f.beforeSend && (0 == f.beforeSend.call(m, M, f) || u)) return M.abort(); + if (w = "abort", y.add(f.complete), M.done(f.success), M.fail(f.error), r = $(we, f, n, M)) { + if (M.readyState = 1, h && g.trigger("ajaxSend", [M, f]), u) return M; + f.async && f.timeout > 0 && (c = t.setTimeout(function() { + M.abort("timeout") + }, f.timeout)); + try { + u = 0, r.send(b, i) + } catch (t) { + if (u) throw t; + i(-1, t) + } + } else i(-1, "No Transport"); + return M + }, + getJSON: function(t, e, n) { + return Ze.get(t, e, n, "json") + }, + getScript: function(t, e) { + return Ze.get(t, void 0, e, "script") + } + }), Ze.each(["get", "post"], function(t, e) { + Ze[e] = function(t, n, i, r) { + return qe(n) && (r = r || i, i = n, n = void 0), Ze.ajax(Ze.extend({ + url: t, + type: e, + dataType: r, + data: n, + success: i + }, Ze.isPlainObject(t) && t)) + } + }), Ze._evalUrl = function(t, e) { + return Ze.ajax({ + url: t, + type: "GET", + dataType: "script", + cache: 1, + async: 0, + global: 0, + converters: { + "text script": function() {} + }, + dataFilter: function(t) { + Ze.globalEval(t, e) + } + }) + }, Ze.fn.extend({ + wrapAll: function(t) { + var e; + return this[0] && (qe(t) && (t = t.call(this[0])), e = Ze(t, this[0].ownerDocument).eq(0).clone(1), this[0].parentNode && e.insertBefore(this[0]), e.map(function() { + for (var t = this; t.firstElementChild;) t = t.firstElementChild; + return t + }).append(this)), this + }, + wrapInner: function(t) { + return qe(t) ? this.each(function(e) { + Ze(this).wrapInner(t.call(this, e)) + }) : this.each(function() { + var e = Ze(this), + n = e.contents(); + n.length ? n.wrapAll(t) : e.append(t) + }) + }, + wrap: function(t) { + var e = qe(t); + return this.each(function(n) { + Ze(this).wrapAll(e ? t.call(this, n) : t) + }) + }, + unwrap: function(t) { + return this.parent(t).not("body").each(function() { + Ze(this).replaceWith(this.childNodes) + }), this + } + }), Ze.expr.pseudos.hidden = function(t) { + return !Ze.expr.pseudos.visible(t) + }, Ze.expr.pseudos.visible = function(t) { + return !!(t.offsetWidth || t.offsetHeight || t.getClientRects().length) + }, Ze.ajaxSettings.xhr = function() { + try { + return new t.XMLHttpRequest + } catch (t) {} + }, Se = { + 0: 200, + 1223: 204 + }, Te = Ze.ajaxSettings.xhr(), He.cors = !!Te && "withCredentials" in Te, He.ajax = Te = !!Te, Ze.ajaxTransport(function(e) { + var n, i; + if (He.cors || Te && !e.crossDomain) return { + send: function(r, o) { + var a, s = e.xhr(); + if (s.open(e.type, e.url, e.async, e.username, e.password), e.xhrFields) + for (a in e.xhrFields) s[a] = e.xhrFields[a]; + for (a in e.mimeType && s.overrideMimeType && s.overrideMimeType(e.mimeType), e.crossDomain || r["X-Requested-With"] || (r["X-Requested-With"] = "XMLHttpRequest"), r) s.setRequestHeader(a, r[a]); + n = function(t) { + return function() { + n && (n = i = s.onload = s.onerror = s.onabort = s.ontimeout = s.onreadystatechange = null, "abort" === t ? s.abort() : "error" === t ? "number" != typeof s.status ? o(0, "error") : o(s.status, s.statusText) : o(Se[s.status] || s.status, s.statusText, "text" !== (s.responseType || "text") || "string" != typeof s.responseText ? { + binary: s.response + } : { + text: s.responseText + }, s.getAllResponseHeaders())) + } + }, s.onload = n(), i = s.onerror = s.ontimeout = n("error"), void 0 !== s.onabort ? s.onabort = i : s.onreadystatechange = function() { + 4 === s.readyState && t.setTimeout(function() { + n && i() + }) + }, n = n("abort"); + try { + s.send(e.hasContent && e.data || null) + } catch (t) { + if (n) throw t + } + }, + abort: function() { + n && n() + } + } + }), Ze.ajaxPrefilter(function(t) { + t.crossDomain && (t.contents.script = 0) + }), Ze.ajaxSetup({ + accepts: { + script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function(t) { + return Ze.globalEval(t), t + } + } + }), Ze.ajaxPrefilter("script", function(t) { + void 0 === t.cache && (t.cache = 0), t.crossDomain && (t.type = "GET") + }), Ze.ajaxTransport("script", function(t) { + var e, n; + if (t.crossDomain || t.scriptAttrs) return { + send: function(i, r) { + e = Ze("